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?
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%Tags und Links .net c# .net-4.0 dynamic dynamic-language-runtime