我想做下面列出的代码。基本上,我希望能够创建一个对象,但同时有选择地提出接口要求

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();

10-06 02:43