我有A类和B类的实例,并且这两个类都实现了一个成员'Text'。有没有办法以通用方式访问成员文本? 我希望有类似javascript的简单说法:
instance['Text'] = value;
注意:遗憾的是,这两个类都没有与Text成员实现相同的接口。
答案 0 :(得分:2)
与javascript不同,C#是一种静态语言,如果两个类都没有实现公共接口或基类,则可以使用反射来实现相同的目标。
instance.GetType().GetProperty("Text").SetValue(instance, "new value", null);
答案 1 :(得分:1)
如果你不能让A和B实现相同的接口,那么你需要使用reflection来按名称访问任何类成员,如下所示:
typeof(A).GetProperty("Text").GetValue(theInstance, null);
其中theInstance
将是A类的实例。
答案 2 :(得分:0)
理想情况下,您应该使用成员“文本”的单个类,它将是A和B的基础。可能它不方便,但它更可靠和正确。 尽量不要使用反射,你可以用其他方式做同样的事情。
答案 3 :(得分:0)
如果可以使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();