Ich habe ein Beispiel:
%Vor%Dort erstelle ich eine Instanz einer Klasse, aber wie kann ich eine Instanz einer Klasse erstellen, die eine Schnittstelle implementiert? d. h., UserControl1 implementiert die ILoad -Schnittstelle.
U: Ich kann das Objekt später in die Schnittstelle umwandeln, aber ich weiß nicht, welcher Typ in den Assemblies die Schnittstelle implementiert.
Dies ist ein Code, den ich ein paar Mal benutzt habe. Es findet alle Typen in einer Assembly, die eine bestimmte Schnittstelle implementieren:
%Vor% Dann haben Sie alle Typen in ClassLibrary1, die ILoad
implementieren.
Sie könnten dann alle von ihnen instanziieren:
%Vor%Sie können keine Instanz einer Schnittstelle erstellen, aber wenn
UserControl1 implementiert ILoad-Schnittstelle
Sie können das resultierende Objekt als ILoad
Außerdem müssen Sie es nicht über die Schnittstelle behandeln, wenn Sie
schreiben %Vor% Mitglieder von ILoad
könnten als uc.SomeILoadMethod();
Das einzige Problem mit der akzeptierten Antwort ist, dass Sie eine konkrete Klasse in Ihrer Assembly haben müssen, die die Schnittstelle implementiert.
Um zu vermeiden, dass ich meinen CustomActivator erstellt habe, der in der Lage ist, zur Laufzeit ein dynamisches Objekt zu erstellen, das die gewünschte Schnittstelle implementiert.
Ich lege es auf den GitHub: Ссылка
Der Anruf ist einfach:
%Vor%Tags und Links .net c# reflection .net-assembly activator