les membres de la classe d'accès nom identique des instances de classes différentes

StackOverflow https://stackoverflow.com/questions/1845592

  •  12-09-2019
  •  | 
  •  

Question

Je instances de la classe A et B, et les deux classes implémentent un membre « Texte ». Y at-il un moyen d'accéder Texte membre d'une manière générique? J'espère pour quelque chose d'analogue à la façon dont le javascript de dire simplement:

instance['Text'] = value;

Note: ces deux classes, malheureusement, ne sont pas à la fois mettre en œuvre la même interface avec un membre du texte

.
Était-ce utile?

La solution

Contrairement à javascript, C # est un langage statique et si les deux classes ne mettent pas en œuvre une interface commune ou classe de base, vous pouvez utiliser la réflexion pour atteindre le même objectif.

instance.GetType().GetProperty("Text").SetValue(instance, "new value", null);

Autres conseils

Si vous ne pouvez pas faire A et B implémenter la même interface, vous devez utiliser réflexion pour accéder à tous les membres de la classe par son nom, quelque chose comme ceci:

typeof(A).GetProperty("Text").GetValue(theInstance, null);

theInstance serait une instance de la classe.

Idéalement, vous devriez avoir seule classe avec un membre « Texte » qui sera la base pour A et B. Il est probablement pas convinient, mais il est plus fiable et correcte. Essayez de ne pas utiliser la réflexion où vous pouvez faire la même chose d'une autre manière.

Si vous pouvez faire A et B implémenter la même interface

 interface ISomeGenericNameForAAndB
{
    string Text { get; }
}
class A :ISomeGenericNameForAAndB
{
    public string Text { get { return "some Text from A"; } }    
}
class B : ISomeGenericNameForAAndB
{
    public string Text { get { return "some Text from B"; } }
}

ISomeGenericNameForAAndB anAInstance = new A();
ISomeGenericNameForAAndB aBInstance = new B();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top