访问具有相同名称的不同类实例的类成员

时间:2009-12-04 08:20:33

标签: c# class members

我有A类和B类的实例,并且这两个类都实现了一个成员'Text'。有没有办法以通用方式访问成员文本? 我希望有类似javascript的简单说法:

instance['Text'] = value;

注意:遗憾的是,这两个类都没有与Text成员实现相同的接口。

4 个答案:

答案 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();