我在构造函数中将对象的Type
作为参数传递,但我想将类型限制为仅从特定接口继承的对象。
public MyClass(Type myType);
我知道我可以检查类型是否继承自方法体中的接口,如下所示:
if(typeof(IMyInterface).IsAssignableFrom(myType))
但参数的类型约束是否可能?
答案 0 :(得分:1)
为什么不让你的班级通用?在这种情况下,您可以指定约束,而不必担心检查参数。
E.g。
public class MyClass<T>
where T : IMyInterface
{
....
}
答案 1 :(得分:0)
因为您显示了在运行时检查类型的代码,所以我假设您希望在编译时强制执行类型约束:
public class MyClass<T> where T : IMyInterface {
public MyClass(T myArg) {
Type myType = typeof(T);
Type argType = myArg.GetType();
Debug.Assert(myType == argType, "types must be the same!");
}
}
您无法在构造函数中执行此操作,但您可以在类声明中执行此操作。