将Type作为参数传递但约束为接口

时间:2013-07-17 19:07:11

标签: c# types type-constraints

我在构造函数中将对象的Type作为参数传递,但我想将类型限制为仅从特定接口继承的对象。

public MyClass(Type myType);

我知道我可以检查类型是否继承自方法体中的接口,如下所示:

if(typeof(IMyInterface).IsAssignableFrom(myType))

但参数的类型约束是否可能?

2 个答案:

答案 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!");
    }
}

您无法在构造函数中执行此操作,但您可以在类声明中执行此操作。