好的,我试着更好地解释我的问题:我有一个
class DynamicTypeCreator{...}
以及其中的一种方法:
static BuildASingletonClassWithTypeBuiler<T> (T object) {...}
这个方法不仅创建了一个单例类型的
class Singleton01<K> {...}
还实例化它,定义字段
static Singleton01<K> instance = new Singleton01<K> (K object)
和另一个字段
static Type typeOfGenericParameter = typeof(K)
。
(上的实际代码https://github.com/TThaan/ExtensionPropertiesForCSharp不同,但这不应该引起关注。(
但是,此方法既不返回singleton类型,也不返回实例。它只是在创造它们
事实上,很多时候只将类型的名称从Singleton01更改为Singleton02、Singleton03等,每次都使用不同的T object
作为参数
因此,当我稍后想要访问其中一个singleton时,我不知道它包含什么对象以及它是什么类型。要获得例如"Singleton03"中任何静态字段的值,我首先使用
Type type = AssemblyBuilder.GetType("Singleton03")
。
现在尝试获取静态字段的值还不起作用,它只是空的。我似乎被迫使用
Type genericType = type.MakeGenericType(new[] { typeof(T) })
。
但要使其工作,我已经需要知道参数T object
的类型
我想知道在使用.MakeGeneric()
之前,是否有一种方法可以获得这种泛型类型中静态字段的值。
我现在找到了答案
由于一个类型的泛型类实际上是另一个类型"同一类"的不同类,
其中一个类中的静态字段与另一个类的静态字段不同。因此,在使用具有拟合类型的.MakeGeneric()
之前,我无法获得其中一个字段的值
解决方案是更改类的创建,例如:泛型类和静态字段。