Frage

Was ist ihre Verwendung, wenn, wenn Sie die Methode aufrufen, ist es vielleicht nicht existieren?

Heißt das, dass Sie dynamisch eine Methode auf einem dynamischen Objekt zu erstellen wäre in der Lage zu?

Was die praktische Anwendung hierfür ist?

War es hilfreich?

Lösung

Sie werden nicht wirklich in der Lage sein, dynamisch die Methode zu erstellen - aber Sie können eine Implementierung von IDynamicMetaObject zu bekommen (oft durch die Erweiterung DynamicObject) zu reagieren als ob die Methode existiert

.

Verwendung:

  • Programmieren gegen COM-Objekte mit einer schwachen API (z Büro)
  • Aufruf in dynamische Sprachen wie Ruby / Python
  • Potenziell machen „erforschbaren“ Objekte - man stelle sich einen XPath-ähnliche Abfrage, sondern über eine Methode / Eigenschaft ruft z.B. document.RootElement.Person[5].Name["Attribute"]
  • Kein Zweifel, viele mehr wir noch denken:)

Andere Tipps

Zunächst einmal können Sie es jetzt nicht mehr verwenden. Es ist ein Teil von C # 4, die irgendwann in der Zukunft veröffentlicht werden.

Im Grunde ist es für ein Objekt, deren Eigenschaften wird erst zur Laufzeit bekannt sein. Vielleicht kommt es von einem COM-Objekt. Vielleicht ist es ein „on the fly Objekt definieren“, wie Sie beschreiben (obwohl ich glaube nicht, dass es eine Möglichkeit für diejenigen zu schaffen noch oder geplant).

Es ist eher wie ein System.Object, mit der Ausnahme, dass Sie Methoden dürfen aufrufen, die der Compiler nicht kennt, und dass die Laufzeit herausfindet, wie man nennen.

Die beiden biggies ich denken kann, sind Ente eingeben und die Fähigkeit, C # als Skriptsprache in Anwendungen, ähnlich wie JavaScript und Python zu verwenden. Die letzte macht mir ein wenig zerreißen.

Betrachten Sie es als eine vereinfachte Form der Reflexion. Statt dessen:

object value = GetSomeObject();
Method method = value.GetType().GetMethod("DoSomething");
method.Invoke(value, new object[] { 1, 2, 3 });

Sie erhalten diese:

IDynamicObject value = GetSomeObject();
value.DoSomething(1, 2, 3);

Ich sehe mehr dynamischen ORM-Frameworks geschrieben werden. Oder Heck schreiben einen selbst.

ich mit Jon Skeet einverstanden ist, können Sie einige interessanten Möglichkeiten der Erforschung Objekte zu sehen. Vielleicht mit Selektoren wie jQuery.

Der Aufruf COM und Aufruf Dynamic Languages.

Ich freue mich darauf, zu sehen, ob es eine Möglichkeit, einen Rubin wie missing_method zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top