mit Dynamisch Methoden hinzufügen?
Im Versuch, add-Funktion zur Laufzeit , so etwas wie, dass :
static void Main()
{
dynamic d = new Duck();
d.Quack =(Action) (() => Console.WriteLine("1")); //decalre a new method on runtime ??
d.Quack();
}
public class Duck : System.Dynamic.DynamicObject
{
//...
}
'UserQuery.Ente' enthält keine definition für 'Quack'
Nicht dynamisch ist, sollte mir erlauben, es zu tun ?
tut, brand new ExpandoObject
ist die einzige Lösung ?
ich habe meine Ente Klasse bereits. wie kann ich es machen Expando ? - kann ich die Ente handeln, wie expando ?
- Für einige absolut obskuren Gründen mein post gelöscht wurde. By the way, können Sie nicht ableiten, von ExpandoObject, und wenn Sie möchten, dass Ihr Objekt verhält sich wie, dass man, Sie haben 2 Lösungen, imo: 1. Erstellen Expando-Objekt, und fügen Sie zunächst alle Eigenschaften und Methoden, die Sie haben in der Ente, und verwenden Sie nicht die Ente. 2. Erzeugen Sie Ihre eigenen ExpandoObject. Schau mal hier: Dynamische Verhalten von Objekten zur Laufzeit Mit angepassten ExpandoObject ausführlichere Beispiel und leiten die Ente aus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können keine Eigenschaften jeglicher Art (auch Funktionen) zu einer vorhandenen Typ.
Könnten Sie ExpandoObject obwohl:
Nicht verwechselt werden mit dem, was der dynamische Typ nicht.
Kann ich jetzt tun :
speak(new Duck());
undspeak(new Goose());
wird , wird es kompiliert und ausgeführt werden, wenn beideDuck
undGoose
haben die MethodeQuack()
, wenn Sie nicht, es wirft eine exception. (Die gleiche, die Sie erhalten)Beim Aufruf einer Methode/Eigenschaft auf eine
dynamic
geben, es löst nur zur Laufzeit und nicht einen compiler überprüfen.Dem ExpandoObject können Sie erstellen, die Eigenschaften on the fly.
Zur Beantwortung Ihrer Frage auf den Kommentar, so wie ich es sehe ist, wenn Sie Ihre eigene Klasse, die die Fähigkeit haben neue Eigenschaften erstellen, die Sie Erben könnten von DynamicObject. Wie diese (adaptiert von dieser msdn-Seite):
Dann Sie tun könnten:
file.nameOfSecondColumn[row]