我想做下面列出的代码。基本上,我希望能够创建一个对象,但同时有选择地提出接口要求
public UserControl CreateObject(string objectName, Type InterfaceRequirement)
{
///// create object code abbreviated here
UserControl NewControl = createcontrol(objectName);
if (InterfaceRequirement == null || NewControl is InterfaceRequirement)
return NewControl;
else
throw new SystemException("Requested object does not implement required interface");
}
由于InterfaceRequirement的问题,以上代码无法编译
现在,我知道我可以使用泛型来做到这一点:
public UserControl CreateObject<T>(string objectName)
{
///// create object code abbreviated here
UserControl NewControl = createcontrol(objectName);
if (NewControl is T)
return NewControl;
else
throw new SystemException("Requested object does not implement required interface");
}
但是对于泛型,接口要求不是可选的。我将类型作为参数传递的第一个代码示例无法编译,我看不到正确的语法。有谁知道没有泛型的方法,所以我可以将其设为可选?
最佳答案
您可以检查typeof(InterfaceRequirement).IsAssignableFrom(theType)
吗?
否则,也许theType.GetInterfaces()
并寻找它。
(其中Type theType = NewControl.GetType();
)