说,我们有一个像这样的泛型类:
public sealed class Class1<T>
{
private T _value;
public T Value
{
get { return _value; }
}
}
我想发起类型为Class1
的对象,但类型参数T
仅可使用GetType()
动态提供。可以使用动态类型的泛型类,如下所示吗?
Class1<anObject.GetType()> obj = new Class1<anObject.GetType()>();
我知道这段代码甚至无法编译,但我需要这样的通用用法。
根据{{3}}我应该使用MakeGenericType
使用反射推断T参数并创建对象,如下所示:
Type typeArgument = anObject.GetType();
Type genericClass = typeof(Class1<>);
Type constructedClass = genericClass.MakeGenericType(typeArgument);
object created = Activator.CreateInstance(constructedClass);
但我以后不知道如何使用创建的对象!因为这是一个隐式对象,并且无法访问其属性Value。我也无法将其投放到Class1
,如果我可以,我最初不必使用MakeGenericType
!在创建对象后如何访问Value?