【发布时间】:2011-02-11 22:19:05
【问题描述】:
我正在尝试列出由泛型类创建的所有运行时构造的类。换句话说,如果我有课:
public GenericCls<T> {
public void Reset() { ... }
...
}
我在不同的地方都有这样的代码:
GenericCls<int> gci = new GenericCls<int>();
GenericCls<String> gcs = new GenericCls<String>();
GenericCls<float> gcf = new GenericCls<float>();
...
我可以得到这样的东西吗?:
Type[] allconstructed = GetAllConstructed(typeof(GenericCls<>));
返回{GenericCls<int>,GenericCls<String>,GenericCls<float>,...}
该用例涉及一个通用分配器,它支持任何类型的对象分配(类似于new XXX(),但对垃圾收集器更好)。我不会详细说明,因为它只会使问题复杂化。基本上,我不会在编译时知道所有构造的类,因为该库是一个 dll,旨在与单独的代码项目一起使用。所以我需要某种形式的反思,我似乎在互联网上找不到。
Assembly.GetExecutingAssembly().GetExportedTypes() 只包含基本泛型类(即typeof(GenericCls<>))
typeof(GenericCls<>).GetGenericArguments() 只返回类型“T”,这不仅是无效类型,而且完全没用。
如果你只知道泛型类的类型,是否甚至可以找到泛型类的所有构造类? (typeof(GenericCls<>);) 我不确定“constructed”是否是正确的词——我想知道当前活动的所有具体的泛型派生类,或者所有这些将存在的类(不确定 C# 如何处理泛型构造幕后)。
【问题讨论】:
-
@Ani,你应该提交它作为答案,恕我直言。
-
您所有未注册的帐户都已合并。请考虑将 OpenID 与此关联,或者如果您不想使用 OpenID,可以注册它。
标签: c# class generics reflection