【发布时间】:2013-07-17 19:07:10
【问题描述】:
我在构造函数中将对象的Type 作为参数传递,但我想将类型限制为仅从特定接口继承的对象。
public MyClass(Type myType);
我知道我可以检查该类型是否继承自方法主体中的接口,如下所示:
if(typeof(IMyInterface).IsAssignableFrom(myType))
但是参数的类型约束可能吗?
【问题讨论】:
-
C# 世界中没有任何东西可以让您进一步限制参数,而不仅仅是通过它的类型和继承。当您编写一个采用 int 的方法时,也无法将方法限制为仅接受 [0, 10] 范围内的数字(通过良好的语法)。你想要的是使用 PostSharp、CodeContracts 或类似的东西,当某些条件不满足时会抛出异常,例如当给定的 Type 对象没有实现某个接口时。您始终可以自己编写此代码,在这种情况下只需抛出 ArgumentException。
标签: c# types type-constraints