2009-08-05 5 views
0

Si j'ai une classe:paramètre de la méthode peut être une classe ou d'une interface, peu confus

public blah 
{ 

} 

Alors j'ai une autre classe qui hérite blah »

public ablah : blah 
{ 

} 

Puis-je faire alors

?
public class Someservice 
{ 
public bool SomeBlah(blah b) 
{ 

} 
} 

ce que je pourrais appeler le service avec soit des classes bla ou Ablah?

ie.

Someservice s1 = new Somesercie(); 

s1.SomeBlah(new blah()); 

s1.SomeBlah(new ablah()); 

J'ai vu quelque part, et je pensais que c'était seulement possible si on utilisait une interface?

+0

Cette question aurait pu recevoir une réponse par quelques touches de votre part. Est-ce que quelqu'un est d'accord qu'il devrait être fermé? –

Répondre

0

Cela fonctionnerait très bien. (en supposant qu'il compile ... vérifiez votre orthographe)

1

Cela s'appelle le polymorphisme et c'est possible avec les classes ainsi qu'avec les interfaces.

Généralement, vous utiliseriez une classe si vous vouliez fournir une partie de l'implémentation dans la classe de base (ce qui n'est pas possible dans une déclaration d'interface). Aussi les interfaces permettent seulement aux membres du public ..

0

Vous pouvez le faire très bien. Vous utilisez l'héritage standard, dans ce cas. La meilleure façon d'y penser est la suivante: "ablah" est un "blah", donc vous pouvez utiliser une instance "ablah" partout où vous attendez un bla.

Un exemple courant est un

public class Animal {} 
public class Dog : Animal {} 

Dans ce cas, « Dog » est un « animal » (que vous attendez), donc si vous avez une méthode qui prend un animal, il travaillera avec un chien.

1

Ouais, bien qu'il n'utilise une interface, mais plutôt une facette de la programmation orientée objet appelé Polymorphisme (http://msdn.microsoft.com/en-us/library/ms173152(VS.80).aspx)

Si vous aviez

public class Someservice{ 
    public bool SomeBlah(ablah b) 
    { } 
} 

Votre code SOMESERVICE ne fonctionnerait pas, parce que tout vous pouvez lancer un objet ablah dans un objet blah, vous ne pouvez pas faire l'inverse. C'est comme dire que j'ai une voiture (bla), et c'est une Toyota (ablah). Si je faisais quelque chose qui avait besoin d'une voiture, ma Toyota répondrait à l'exigence. Mais si je devais faire quelque chose qui exigeait une Toyota, je ne pourrais utiliser aucune vieille voiture.

HTH. pk

Questions connexes