通常这就是我为类属性制作泛型类型的方式:
我的模型看起来像:
public class CustomerProfile<T> where T : class
{
public T Address{ get; set; }
}
将类型从我的客户端代码发送到泛型类型类的代码:
var genericTypeParameter = typeof(CustomerAddress);
var genericBaseType = typeof(CustomerProfile);
var genericType = genericBaseType.MakeGenericType(genericTypeParameter );
现在我必须创建如下的类层次结构:
public class Customer : CustomerProfile
{
public Customer Names { get; set; }
}
现在,我如何将类型CustomerAddress类型发送到CustomerProfile类Generic type?
如何将类型CustomerAddress类型发送到CustomerProfile类Generic type?
您只需要在声明中指定类型:
public class Customer : CustomerProfile<CustomerAddress>
{
public Customer Names { get; set; }
}
如果您在编译时不知道CustomerAddress
类型,那么您将需要使Customer
通用:
public class Customer<T> : CustomerProfile<T>
{
public Customer Names { get; set; }
}
然后以当前获取CustomerProfile<T>
的方式获取Customer<T>
类型。
我承认,你发布的其余代码似乎很奇怪。目前还不清楚为什么要使用反射来实例化一个在编译时知道类型参数的类型。typeof(CustomerProfile<CustomerAddress>)
应该和您发布的基于反射的代码一样好用。
Names
属性的类型与声明类型相同,这似乎很奇怪。
但是,根据上面的例子,就向基类获取正确的类型参数而言,这是微不足道的。