Доступ к членам класса с одинаковыми именами экземпляров разных классов

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

  •  12-09-2019
  •  | 
  •  

Вопрос

У меня есть экземпляры классов A и B, и оба класса реализуют элемент 'Text'.Есть ли способ получить доступ к тексту участника общим способом?Я надеюсь на что-то аналогичное способу javascript просто сказать:

instance['Text'] = value;

Примечание:к сожалению, эти два класса не оба реализуют один и тот же интерфейс с текстовым элементом.

Это было полезно?

Решение

В отличие от javascript, C # является статическим языком, и если оба класса не реализуют общий интерфейс или базовый класс, вы могли бы использовать отражение для достижения той же цели.

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

Другие советы

Если вы не можете заставить A и B реализовать один и тот же интерфейс, то вам нужно использовать отражение чтобы получить доступ к любому члену класса по имени, что-то вроде этого:

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

где theInstance был бы экземпляром класса A.

В идеале у вас должен быть один класс с членом "Text", который будет базовым для A и B.Возможно, это не удобно, но так надежнее и правильнее.Старайтесь не использовать отражение там, где вы можете сделать то же самое другим способом.

Если вы можете заставить A и B реализовать один и тот же интерфейс

 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();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top