2009-07-27 8 views
4

Dans les démos C# 4.0, je vois beaucoup de code qui utilise le type dynamique. Par exemple, le code suivant définit la valeur d'une cellule Excel:Pourquoi les bibliothèques COM utilisées à partir de C# 4.0 nécessitent-elles une utilisation aussi intensive des types dynamiques?

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

Cependant, vous pouvez également accéder à la cellule d'une manière liée au début avec une distribution:

((Plage) excel.Cells [1, 1]). Value = ...;

Pourquoi la bibliothèque COM Excel ne décrit-elle pas simplement le type de cellule comme type de plage en premier lieu? De même, tous les arguments à la méthode suivante sont dynamiques:

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

Pourquoi ne pouvait pas les arguments ont été statiques? En regardant le modèle d'objet Excel, il y a des types dynamiques partout. Est-ce dû à des limitations dans l'expressivité dans COM? Existe-t-il un modèle dans lequel les types dynamiques plutôt que les types statiques sont utilisés dans les bibliothèques COM?

+0

Je suppose que le "pourquoi dynamique" était l'objectif initial des démos, non? :) – Galilyou

Répondre

2

La bibliothèque COM l'expose comme une variante, ce qui pourrait signifier un certain nombre de choses. C'est vraiment la "faute" de la bibliothèque Office de faire tant de choses avec des variantes. Le type dynamicdynamic est l'équivalent .NET le plus proche de la variante (maintenant il existe), mais l'équipe n'a pas voulu modifier tlbimp pour générer des types dynamiques dans les assemblys PIA pour des raisons de compatibilité descendante. Vous obtiendrez uniquement la conversion "variant en dynamique" en C# 4 lorsque reliera à un PIA (en construisant les bits que vous utiliserez dans votre propre assemblage) au lieu de le référencer.

2

Dans les démos C# 4.0, je vois beaucoup de code qui utilise le type dynamique.

Depuis dynamic est l'un des plus grands changements dans C# 4.0, je serais extrêmement surpris si ce n'a pas été le cas. Que ne signifie pas signifie que vous devriez immédiatement commencer à écrire tout votre code avec dynamic - tout simplement que vous devriez reconnaître quand il pourrait être utile.

La variance et les changements d'arguments optionnels/nommés sont également appréciés, bien sûr, mais font une démonstration beaucoup plus courte.

Historiquement, le Bureau (en particulier) a été un tel porc au programme contre que c'est une « grande chose * pour les personnes qui automatisent Office.

  • personnes qui consomment COM (et Office en particulier)
  • personnes qui consomment types DLR (IronPython etc)
  • personnes qui parlent à des systèmes dynamiques tels que javascript (Silverlight, etc.)

Personnellement, je ne pense pas dynamic pour révolutionner la façon dont je programme en C#, mais il est grand pour certaines personnes:

1

En fait, c'est parce que la bibliothèque Office com a été créée avec Visual Basic à l'esprit.

Encore plus, vous pouvez penser que toute la hiérarchie d'objets a été créée pour VB (VB simple sans .net). Et VB historiquement créé de telle manière qu'il est simple d'utiliser des interfaces com IDispatch'able (utilisant une liaison tardive).

Et ce que nous avons maintenant c'est un fardeau de rétrocompatibilité.

Questions connexes