Comment puis-je faire ceci:
8 Réponses :
Vous ne pouvez pas, c # ne prend pas en charge plusieurs héritages de classes. P>
Si vous fournissez un exemple plus concret de ce que vous essayez de faire, peut-être que nous pouvons vous donner une meilleure solution (par exemple, peut-être que la composition est ce que vous avez après, plutôt que sur l'héritage - bien sûr, je peux ' t bien dire de cet exemple simple). P>
Vous ne pouvez pas avoir Cependant, si vous voulez c code> être à la fois un
A code> et un
B code> à moins d'une de ces hérités de l'autre. p>
C code> avoir des comportements de
A code> et
B code> qui ne sont pas communs à ces deux, utilisez une interface. p>
C # n'a pas de héritage multiple, la ligne ne fonctionnera jamais. Vous pouvez faire des choses similaires avec des interfaces, le long des lignes de p>
Vous ne pouvez pas faire de multiples héritage dans C # mais vous pouvez implémenter plusieurs interfaces: p>
Ou vous pouvez utiliser la composition et flamber votre propre sentier. :)
Autre moyen, qui n'utilise pas la composition, utilise des méthodes d'extension. Définissez des interfaces sans méthodes et mettez-les avec votre classe C. Ensuite, écrivez une classe statique avec des méthodes d'extension qui fournissent des implémentations contre votre interface.
public static void MyMethod(this InterfaceA a) { // do stuff with a }
Pour le meilleur ou le pire C # ne prend pas en charge de multiples héritage. Cependant, j'ai eu un succès limité pour la simuler en utilisant Méthodes d'extension . L'approche de la méthode d'extension pourrait ressembler à ceci.
public interface IA { void DoSomething(); } public interface IB { void DoSomethingElse(); } public class A : IA { void DoSomething() { } } public class B : IB { void DoSomethingElse() { } } public class C : IA, IB { private A m_A = new A(); private B m_B = new B(); public void DoSomething() { m_A.DoSomething(); } public void DoSomethingElse() { m_B.DoSomethingElse(); } }
Je pense que l'exclusion de C # de MI est pour le pire. Mais c'est parce que je pense surtout que l'argument de la complexité est trop transmit. Je suppose que nous avons tous nos opinions, mais c'est une fois que je suis le plus répandu ... pour le meilleur ou le pire bien sûr :)
Donc, je suppose que cela ne peut pas l'être fait ...
Vous pouvez y parvenir par héritage à plusieurs niveaux ... Par ceci, vous pouvez accéder à toutes les méthodes et propriétés de ces classes. P> P>