9
votes

Comment simuler plusieurs héritage dans C #

Comment puis-je faire ceci: xxx


0 commentaires

8 Réponses :


4
votes

Vous ne pouvez pas, c # ne prend pas en charge plusieurs héritages de classes.

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).


0 commentaires

2
votes

Vous ne pouvez pas avoir c être à la fois un A et un B à moins d'une de ces hérités de l'autre.

Cependant, si vous voulez C avoir des comportements de A et B qui ne sont pas communs à ces deux, utilisez une interface.


0 commentaires

32
votes

C # n'a pas de héritage multiple, la ligne xxx

ne fonctionnera jamais. Vous pouvez faire des choses similaires avec des interfaces, le long des lignes de xxx


0 commentaires

7
votes

Vous ne pouvez pas faire de multiples héritage dans C # mais vous pouvez implémenter plusieurs interfaces:

  1. Créez une interface avec les mêmes méthodes que les membres du public d'un
  2. Créez une interface avec les mêmes méthodes que les membres du public de B
  3. Créez des variables de membre pour A et B à l'intérieur de c.
  4. Mettre en œuvre l'interface A à la fois A et C (C Applique simplement à la variable de son élément de type A)
  5. Implémenter l'interface B de B et C (la mise en œuvre de C appelle simplement sa variable de membre de type B)

1 commentaires

Ou vous pouvez utiliser la composition et flamber votre propre sentier. :)



1
votes

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
}


0 commentaires

2
votes

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(); }
}


1 commentaires

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 :)



0
votes

Donc, je suppose que cela ne peut pas l'être fait ... xxx


0 commentaires

0
votes

Vous pouvez y parvenir par héritage à plusieurs niveaux ... XXX

Par ceci, vous pouvez accéder à toutes les méthodes et propriétés de ces classes.


0 commentaires