好吧,我尝试更好地解释我的问题:我有
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上的实际代码有所不同,但这无关紧要。)
但是,此方法既不返回单例类型也不返回实例。只是创建它们而已。
实际上,很多时候,仅将类型的名称从Singleton01更改为Singleton02,Singleton03等,并且每次都使用不同的T object
作为参数。
因此,当我以后想要访问这些单例之一时,我不知道它包含什么对象以及它的类型。要获取“ Singleton03”中任何静态字段的值,我首先使用
Type type = AssemblyBuilder.GetType("Singleton03")
。
现在尝试获取静态字段的值尚无用,只是空值。我似乎被迫使用
Type genericType = type.MakeGenericType(new[] { typeof(T) })
。
但是要使其正常工作,我已经需要知道参数T object
的类型。
我想知道在使用.MakeGeneric()
之前是否可以通过这种通用类型获取静态字段的值。
答案 0 :(得分:0)
我现在找到了答案。
由于一种类型的泛型类实际上是另一类,因此另一种类型的“同一类”,
这些类之一中的静态字段与另一类中的静态字段不同。因此,在将.MakeGeneric()
与拟合类型一起使用之前,我无法获得这些字段之一的值。
解决方案是更改类的创建,例如:
Generic classes and static fields。