Zugriff identisch benannten Klassenmitglieder von Instanzen verschiedener Klassen
Frage
Ich habe Instanzen der Klasse A und B, und beide Klassen ein Mitglied ‚Text‘ implementieren. Gibt es eine Möglichkeit Mitglied Text in allgemeiner Weise zuzugreifen? Ich hoffe auf etwas analog zu der Art und Weise Javascript einfach zu sagen:
instance['Text'] = value;
Hinweis: diese beiden Klassen leider nicht beide die gleiche Schnittstelle mit einem Textelement implementieren
.Lösung
Im Gegensatz zu Javascript, C # ist eine statische Sprache und wenn beide Klassen implementieren keine gemeinsame Schnittstelle oder Basisklasse könnte man Reflexion verwendet das gleiche Ziel zu erreichen.
instance.GetType().GetProperty("Text").SetValue(instance, "new value", null);
Andere Tipps
Wenn Sie nicht A machen und B die gleiche Schnittstelle implementieren, müssen Sie
Im Idealfall sollten Sie einzelne Klasse mit „Text“ haben die Basis für A und B sein wird Wahrscheinlich ist es nicht convinient, aber es ist zuverlässiger und richtig ist.
Versuchen Sie nicht, Reflexion zu verwenden, wo Sie das gleiche auf andere Weise tun können.
Wenn Sie A machen und B die gleiche Schnittstelle implementieren
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();