2009-07-27 2 views
4

C#4.0デモでは、ダイナミック型を使用するコードが多数表示されています。しかし、あなたはまたして早期にバインドされた方法でセルにアクセスすることができますC#4.0で使用されているCOMライブラリで、動的なタイプを頻繁に使用する必要があるのはなぜですか?

excel.Cells [1、1] .Valueの= ...

:たとえば、次のコードでは、Excelのセルの値を設定しますキャスト:

(範囲)excel.Cells [1,1])。値= ...;

Excel COMライブラリは、最初にセルタイプを範囲タイプとして記述しないのはなぜですか?同様に、以下の方法のすべての引数は動的です:

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

なぜ引数は静的されていませんでしたか? Excelのオブジェクトモデルを見ると、どこにでも動的な型があります。これはCOMの表現力の限界に起因するのでしょうか? COMライブラリで静的型ではなく動的型を使用するパターンがありますか?

+0

「なぜダイナミック」がデモの本来の目的だと思いますか? :) – Galilyou

答えて

2

COMライブラリはこれをバリアントとして公開しています。これは任意の数のことを意味します。実際には、バリアントで非常に多くのことを行うためのOfficeライブラリの「不具合」です。

dynamicタイプは、variant(現在は存在します)に相当する最も近い.NETですが、チームは下位互換性の理由からtlbimpをPIAで動的タイプを生成するように変更したくありませんでした。 PIA(独自のアセンブリに使用するビットを構築する)を参照する代わりにリンクするときに、C#4でのみ「バリアントを動的に」変換します。

2

C#4.0デモでは、ダイナミックタイプを使用するコードが多数表示されています。 dynamic以来

は、C#4.0の最大の変化の一つであり、このケースではなかった場合、私は非常に驚かれることと思います。そのではありません。ただちにdynamicですべてのコードを書き始めてください。の場合はとなると分かります。

もちろん、分散と省略可能な/名前付きの引数の変更も当然ですが、はるかに短いデモを行います。歴史的には、(特に)Officeは、このOfficeを自動化する人々のための「大きなもの*であることに対してプログラミングするためにそのような豚となっている

  • (特におよびOffice)COMを消費する人々は
  • DLRの種類(IronPythonの等)個人的にJavaScriptなどの動的システムに話を
  • 人(シルバーなど)

を消費

  • 人々は、私が期待していない私はC#でプログラムする方法に革命をもたらしましたが、それは一部の人にとっては大きなものです。

  • 1

    これはVisual BasicでOfficeのcomライブラリが作成されたためです。

    さらに、オブジェクト階層全体がVB用に作成されたと考えることができます。そして、VBは歴史的に、(バインディングを使用して)それからのIDispatch'able comインターフェイスを使用するのが簡単なように作成しました。

    私たちが今持っているものは、下位互換性の負担です。

    関連する問題