题
我有 A 类和 B 类的实例,这两个类都实现了成员“Text”。有没有一种方法以通用方式访问成员文本?我希望有一些类似于 javascript 的方式,简单地说:
instance['Text'] = value;
笔记:不幸的是,这两个类并不都使用 Text 成员实现相同的接口。
解决方案
JavaScript的不同,C#是一种静态语言,如果这两个类没有实现一个共同的接口或基类,你可以使用反射来达到同样的目标。
instance.GetType().GetProperty("Text").SetValue(instance, "new value", null);
其他提示
如果你不能让A和B实现相同的接口,那么你需要使用 反射 通过名称访问任何类成员,如下所示:
typeof(A).GetProperty("Text").GetValue(theInstance, null);
在哪里 theInstance
将是 A 类的一个实例。
理想情况下你应该有构件“文本”,这将是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();
不隶属于 StackOverflow