我有一个界面:
public interface InterfaceA<S,T>{}
Run Code Online (Sandbox Code Playgroud)
我想加载实现此接口的所有类的实例,而不管通用参数S和T.所以我有一个类,有一个方法来做到这一点.方法签名目前是:
public IEnumerable<object> GetInstancesOfImplementingTypes (Type targetType)
Run Code Online (Sandbox Code Playgroud)
通过加载的程序集查找具有一个类型,以反映GetGenericTypeDefinition等于所述GetGenericTypeDefinition的targetType.我正在使用类型(而不是在方法上有一个T param),所以我不必指定泛型参数,即我可以像这样调用它:
var foundinstances = o.GetInstancesOfImplementingTypes(typeof(InterfaceA<,>))
Run Code Online (Sandbox Code Playgroud)
但我似乎必须将找到的类型的实例作为对象返回.是否有某种方式我可以返回一个比仅仅对象更受约束的类型,因为我知道所有实例都将是一些实现InterfaceA,我只是不知道什么S和T将来.
否.InterfaceA<S,T>就CLR而言,不同的实例化是无关的,因此除非它们具有非通用的公共基础,否则必须使用对象.
如果InterfaceA中有一些成员不依赖于类型参数,并且您希望无论S和T是否都可以访问,那么您可能希望创建另一个InterfaceA继承的非泛型接口,仅包含那些成员.
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |