我需要找到一种从泛型类的实例中检索属性的方法,其中泛型参数类型是派生类 . 例如:
Class A
{
public int data;
}
Class B : Class A { }
Class C : Class A { }
Class D : Class A { }
.
.
.
Class G<T>
{
T field
}
main()
{
object t = CallOuterService();
}
假设t是用其中一个派生类实例化的G实例,有没有办法访问数据字段而不试图转换为所有派生类?
*编辑 - 1.数据字段是公共的2.类A,B,C ... G不是由我的代码处理的,它们都是与外部服务的接口 . 我不能以任何方式编辑它们......
1 回答
通过covariance你可以:
然后:
请注意,您只能读取
field
属性,而不能写它!并且协方差仅适用于接口(因此我必须定义IG<T>
接口并使用它来访问field
属性)