Verwenden von Dynamisch zum Hinzufügen von Methoden?

9

Ich versuche, Funktion zur Laufzeit hinzuzufügen, etwa so:

%Vor%

'UserQuery.Duck' enthält keine Definition für 'Quack'

Soll ich nicht dynamisch sein?

ist brandneu ExpandoObject die einzige Lösung?

Ich habe meine Duck-Klasse bereits . Wie kann ich es Expando machen? - Kann ich Ente wie Expando wirken lassen?

    
Royi Namir 09.05.2012, 09:04
quelle

1 Antwort

14

Sie können keinem vorhandenen Typ Eigenschaften eines beliebigen Typs (gerade Funktionen) hinzufügen.

%Vor%

Sie könnten ExpandoObject trotzdem verwenden:

%Vor%

Seien Sie nicht verwirrt mit dem, was der dynamische Typ tut.

%Vor%

Jetzt kann ich: speak(new Duck()); und speak(new Goose()); , es wird kompiliert und ausgeführt, wenn sowohl Duck als auch Goose die Methode Quack() haben, wenn sie dies nicht tun, wird eine Ausnahme ausgelöst. (Das gleiche, das Sie bekommen)

Wenn Sie eine Methode / Eigenschaft für einen dynamic -Typ aufrufen, löst sie das nur zur Laufzeit auf und führt keine Compiler-Prüfung durch.

Mit ExpandoObject können Sie Eigenschaften im laufenden Betrieb erstellen.

Um Ihre Frage zu dem Kommentar zu beantworten, sehe ich wie folgt aus: Wenn Sie eine eigene Klasse benötigen, die neue Eigenschaften erstellen kann, können Sie von DynamicObject . So (angepasst von diese msdn-Seite ):

%Vor%

Dann könnten Sie tun:

%Vor%     
gideon 09.05.2012, 09:16
quelle