[英]Generic class definition with both generic type constraint and inherited type?
[英]Convert Type to Generic Class Definition
我想将System.Type
转换为Generic Type定义,因此我可以使用它来调用Generic方法。 基本上与typeof
相反。
示例(我使用“classof”,我需要真正的解决方案,以便您看到我遇到问题的地方,因为classof不是真正的.NET方法):
public class BaseAppContext {
private Type settingsType;
public Type SettingsType
{
get { return this.settingsType; }
set { this.SettingsType = value; }
}
public void MyFunction() {
MyStaticClass.GetData<classof(this.SettingsType)>();
}
}
更多信息为什么我使用这种奇怪的方式来处理问题。 BaseAppContext是一个由许多其他类引用的类。 如果我愿意使它成为通用,这将意味着代码的许多其他部分将改变,这是我不想要的。 我正在编写一个框架,所以我希望框架能够输入一次类型,开发人员只需使用提供的函数,而无需在每次尝试调用方法时处理类型。
这是不可能的,因为在运行时SettingsType
,并且编译了<>
之间的代码。
您可以像这样创建类型的实例:
var type = Type.GetType(SettingsType);
var inst = Activator.CreateInstance(type);
并将inst
转换为接口或基类。
由于你使用的是静态类,所以富人的答案会更好。
这基本上是不可能的。
泛型形成编译时类型; 您无法从仅在运行时知道的类型创建编译时类型。
相反,您需要使用反射,或使用不同的设计(例如,非通用方法)。
要实现这一点,您需要使用反射:
public void MyFunction() {
var method = typeof(MyStaticClass).GetMethod("GetData").MakeGenericMethod(SettingsType);
method.Invoke(null, null);
}
但是,我不建议这样做,而是建议重新设计您的解决方案。 使用反射意味着您错过了语言提供的所有可爱的编译时安全性。 这通常会导致代码更脆弱,维护更少。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.