如何将 System.Type
作为有约束的泛型参数?
这里接口 I
拥有单一方法 M
,类 C
和 D
实现了该接口。
public interface I {
void M;
}
public class C: I {
public void M();
}
public class D: I {
public void M();
}
Service实例化一个新的T()(实际上是C
/D
实现I
接口),并在上面运行I
接口方法。
public class Service {
public void Fn<T>(T t): where T : Type, I, new() {
( new t() ).M();
// ...
}
}
这将最终成为服务的公共API,因此我希望它尽可能简明扼要:
public class Main {
public void main() {
Service.Fn( typeof( C ));
Service.Fn( typeof( D ));
// ...
}
}
这段代码无法编译且出现错误:
'System.Type'必须是一个非抽象类型,具有公共的无参构造函数,才能在泛型类型或方法中用作参数'T'
最终目标是能够像Main
描述的那样简洁地调用Service.Fn
。 如果我的接口尝试有其他替代方案,也可以提供。
C
/D
?如果是的话,你应该使用一个通用参数,例如Service.Fn<C>()
。 - Guvantetypeof(C)
)和类型标记(例如Service.Fn<C>()
)之间的区别。 - phoog