VBとC#の遅延バインディングの違いについてにゃんにゃん言っている人がいたので、
をぼけと眺めてみる。
Visual Basic .NET では、IDispatch::GetIDsOfNames メソッドを使用して、そのオブジェクトでサポートされているメソッドおよびプロパティを確認し、IDispatch::Invoke メソッドを使用して、それらのメソッドやプロパティを呼び出すことができます。
Visual C# では、IDispatch::GetIDsOfNames メソッドを使用して、そのオブジェクトでサポートされているメソッドおよびプロパティを確認し、IDispatch::Invoke メソッドを使用して、それらのメソッドやプロパティを呼び出すことができます。
書いてあることは変わらんなーと思いつつサンプルコードを見てみたら全然違ってて噴いた。
以下、サンプルコード抜粋。
Visual Basic .NET 事前バインディング
Dim objApp As Excel.Application
Dim objBooks As Excel.Workbooks
objApp = New Excel.Application()
objBooks = objApp.Workbooks
Visual Basic .NET 遅延バインディング
Dim objApp As Object
Dim objBooks As Object
objApp = CreateObject("Excel.Application")
objBooks = objApp.Workbooks
Visual C# .NET 事前バインディング
Excel.Application objApp;
Excel.Workbooks objBooks;
objApp = new Excel.Application();
objBooks = objApp.Workbooks;
Visual C# .NET 遅延バインディング
object objApp_Late;
object objBooks_Late;
Type objClassType;
objClassType = Type.GetTypeFromProgID("Excel.Application");
objApp_Late = Activator.CreateInstance(objClassType);
objBooks_Late = objApp_Late.GetType().InvokeMember( "Workbooks", BindingFlags.GetProperty, null, objApp_Late, null );
ああ、これは確かに面倒だ。
ただやっぱり、
このような遅延バインディングには、事前バインディングでは避けられないバージョン依存関係を部分的に回避できるという利点があります。
が必要になる場面はあるわけで、さりとて
ただし、オートメーション コードの完全性をコンパイル時にチェックできなくなり、メソッドやプロパティの適切な呼び出しを支援する Intellisense 機能が提供されないという欠点もあります。
は嬉しくないわけで。
ままならない。