Ich möchte etwas wie den unten aufgeführten Code tun. Im Grunde möchte ich in der Lage sein, ein Objekt zu schaffen, sondern gleichzeitig die optional auf einer Schnittstelle Anforderung stellteC# Übergeben Sie einen Typ an eine Methode, die in einer "is" -Anweisung ausgewertet werden soll?
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");
}
Der obige Code nicht kompilieren, weil Probleme mit InterfaceRequirement
jetzt, ich weiß, ich kann dies mit Generika machen:
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");
}
aber mit den Generika ist die Schnittstellenanforderung nicht optional. Das erste Codebeispiel, in dem ich Typ als Parameter übergebe, kompiliert nicht, und ich kann nicht sehen, um die Syntax richtig zu machen. Kennt jemand einen Weg, dies ohne Generika zu tun, damit ich es optional machen kann?
Sie direkt mit einer wenig Anpassung an Ihren Code war: InterfaceRequirement.IsAssignableFrom (NewControl. GetType()); – leifre