1

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

public MyClass(Type myType);

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

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

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

4

2 回答 2

1

你为什么不让你的类通用?在这种情况下,您可以指定您的约束,而不必费心检查参数。

例如

public class MyClass<T>
    where T : IMyInterface
{
    ....
}
于 2013-07-17T19:32:39.353 回答
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!");
    }
}

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

于 2013-07-17T19:37:32.853 回答