Question

est-il valide et légal et vers le bas-cast dans le cas suivant:

public interface IA {
  string Property1 {get;}
}
public class B {
   public string Name {get;set;}
}

// class A doesn't have it's own fields, all IA methods/properties are implemented through B methods
public class A:B,IA 
{
   public string Property1
   {
      get {return this.Name}
   }
}
.....
B b = new B();
A a = (A)b; // will it work ?

Ou est-il préférable à la composition de l'utilisation / l'agrégation?

public class A :IA
{
   private B b;
   ....
   public string Property1 {get {return b.Name;} }
   public A(B b) {this.b = b}
}
....
B b= new B();  
A a = new A(b);
Était-ce utile?

La solution

Le premier exemple ne fonctionne pas, parce que A est un B; une instance de type B peut un A, mais dans votre cas, il n'est pas. Castings échouera, et vous obtiendrez un InvalidCastException lors de l'exécution.

Le deuxième exemple travaillera, en ce qu'il compiler et exécuter comme prévu. Mais sans le savoir plus de détails au sujet de votre problème réel (pas un problème fictif) Je ne peux pas vous dire si cela est le bon modèle.

Autres conseils

Non, ce n'est pas juridique. Un Cat est un Animal mais un Animal est pas nécessairement un Cat (remplacer par A Cat et B par Animal dans votre exemple).

Composition pourrait ne pas donner un sens, comme les Cat et exemple de Animal montre à nouveau. La composition est habituellement pour "a une" relation, et un Animal ne dispose pas d'un Cat.

Quel modèle fonctionnera pour votre cas spécifique dépend des types de béton dans votre domaine.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top