2013-07-17 43 views
1

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

public MyClass(Type myType); 

我知道我可以检查该类型从接口继承的方法的身体像这样:

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

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

+0

在C#世界中没有任何东西可以让你进一步限制一个参数,而不仅仅是它的类型和继承。当你编写一个采用int的方法时,也不可能将该方法限制为只接受[0,10]范围内的数字(通过一种很好的语法)。你想要的是使用PostSharp,CodeContracts或类似的东西,当某些条件不满足时抛出异常,例如,当给定的Type对象没有实现某个接口时。您可以自己编写此代码,只需在此情况下引发ArgumentException。 – Simon

回答

1

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

E.g.

public class MyClass<T> 
    where T : IMyInterface 
{ 
    .... 
} 
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!"); 
    } 
} 

你不能做到这一点在构造函数中,但你可以在类声明中做到这一点。