2009-07-27 13 views
4

In den C# 4.0-Demos sehe ich viel Code, der den dynamischen Typ verwendet. Zum Beispiel der folgende Code den Wert einer Excel-Zelle setzt:Warum benötigen COM-Bibliotheken, die in C# 4.0 verwendet werden, eine derart starke Verwendung dynamischer Typen?

excel.Cells [1, 1] .Value = ...

Sie können jedoch die Zelle zugreifen auch in einem frühen gebundenen Weise mit eine Besetzung:

((Bereich) excel.Cells [1, 1]). Wert = ...;

Warum beschreibt die Excel-COM-Bibliothek nicht zuerst den Zelltyp als Bereichstyp? In ähnlicher Weise alle Argumente der folgenden Verfahren sind dynamisch:

excel.ActiveWorkbook.Charts.Add (...)

Warum konnte die Argumente statisch gewesen? Betrachtet man das Excel-Objektmodell, gibt es überall dynamische Typen. Liegt das an Einschränkungen der Aussagekraft in COM? Gibt es ein Muster, wenn dynamische Typen anstelle von statischen Typen in COM-Bibliotheken verwendet werden?

+0

Ich denke, das "warum dynamische" war der ursprüngliche Zweck der Demos, richtig? :) – Galilyou

Antwort

2

Die COM-Bibliothek macht dies als eine Variante verfügbar, die eine beliebige Anzahl von Dingen bedeuten könnte. Es ist wirklich der "Fehler" der Office-Bibliothek, so viele Dinge mit Varianten zu machen.

Der Typ dynamic ist das nächste .NET-Äquivalent zur Variante (jetzt existiert es), aber das Team wollte tlbimp nicht ändern, um aus Gründen der Abwärtskompatibilität dynamische Typen in PIAs zu generieren. Sie erhalten die "variant to dynamic" -Konvertierung nur in C# 4, wenn eine PIA (die die von Ihnen verwendeten Bits in Ihre eigene Assembly baut) verbindet, anstatt sie zu referenzieren.

2

In den C# 4.0-Demos sehe ich viel Code, der den dynamischen Typ verwendet.

Da dynamic ist eine der größten Veränderungen in C# 4.0, würde ich äußerst überrascht, wenn diese nicht der Fall ist. Dass nicht bedeutet, sollten Sie sofort anfangen, Ihren gesamten Code mit dynamic zu schreiben - einfach, dass Sie erkennen sollten, wann es könnte nützlich sein könnte.

Die Varianz und optional/Named Argument Änderungen sind natürlich auch zu schätzen - aber machen Sie eine viel kürzere Demo.

Historisch Amt (insbesondere) war so ein Schwein gegen das programmieren, das ist eine „große Sache * für Menschen, die Office automatisieren.

  • Menschen, die COM verbrauchen (und Office vor allem)
  • Menschen, die DLR-Typen (Ironpython usw.)
  • Menschen, die auf dynamische Systeme wie Javascript (Silverlight usw.) verbrauchen

persönlich sprechen, ich erwarte nicht, dynamic zu revolutionieren die Art, wie ich in C# programmiere, aber es ist groß für einige Leute:

1

Eigentlich ist dies, weil Office COM-Bibliothek mit Visual Basic im Hinterkopf erstellt wurde.

Noch mehr können Sie denken, dass die gesamte Objekthierarchie für VB (einfache VB ohne .net) erstellt wurde. Und VB historisch so geschaffen, dass es einfach ist, IDispatch'able com-Schnittstellen von ihm zu verwenden (mit spätem Binden).

Und was wir jetzt haben, ist eine Last der Abwärtskompatibilität.