Frage

C # 4.0 führt dynamic Schlüsselwort, das zur Laufzeit nachschlagen.

Bedeutet dies, wir umständlich Reflexion mehr nicht brauchen werden? Wenn der Fall ist, Können Sie ein Beispiel davon zeigen?

War es hilfreich?

Lösung

Wir werden noch Reflection haben - 'dynamisch' gegen regelmäßige CLR-Objekte verwendet, wird eine Reflection-basierten Dispatcher aufrufen

.

So -. Wir noch Reflexion haben, aber es wird einfacher zu tun

Hier ist ein Beispiel:

// Via 'dynamic'    
dynamic dx = GetSomeCLRObject();
dx.DoSomething();
dx.SomeMember = 2;

// Via Reflection
object x = GetSomeCLRObject();
Type xt = x.GetType();
MemberInfo DoSomethingMethod = xt.GetMethod("DoSomething");
DoSomethingMethod.Invoke(x, null);
PropertyInfo SomeMemberProperty = xt.GetProperty("SomeMember");
SomeMemberProperty.SetValue(x, 2);

Ich weiß nicht, über Sie, aber Ich mag die ehemalige. =)

In diesen beiden Fällen bekomme ich keine Kompilierung-Überprüfung, keine Intellisense, keine IDE-Unterstützung -. Aber der erstere Fall ist viel ausdrucksvoller als die letztere

Andere Tipps

Dynamische Versand ist nur eine mögliche Verwendung der Reflexion. Es gibt viele gute Gründe, eine Klasse für seine Struktur abzufragen, Informationen über diese Struktur zu erhalten und ohne jemals dynamisch Zugriff auf Mitglieder in irgendeiner Form wirken auf sie in irgendeiner Weise zu visualisieren. Die Reflexion ist hier zu bleiben. :)

Wenn Sie Beispiele für die dynamische Keyword, hier ein Video von PDC der Mann selbst darüber zu reden (und andere Sachen C # 4.0 bezogen).

Dynamische wird ein langer Weg zur Lösung von Problemen mit bekannten Verfahren gehen nur dem Namen nach, wo dieser Name bekannt ist und bei der Kompilierung festgelegt -. Aber natürlich könnten solche Methoden auch als Schnittstellen ausgedrückt werden, wenn Sie die Typen steuern

Es gibt Fälle, in denen dynamic überhaupt nicht helfen würde:

  • , wobei der Methodenname zur Kompilierzeit nicht bekannt ist (das heißt es wird geladen von config / user input)
  • Objekterstellung
  • vielleicht einige Generika Szenarien

Die größten Verwendungen ich für dynamic sehen sind:

  • COM-Interop (natürlich)
  • generic Bedienerunterstützung
  • Ente eingeben, wo es keine gemeinsame Schnittstelle
  • DLR-Interop (siehe Kommentare)

Aber es ist definitiv nicht jede Reflexion weh lösen.

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