我有 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();
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top