.NET 型と COM 型の間の相互運用性の秘密
C# コンパイラは、COM (コンポーネント オブジェクト モデル) 型と対話するときに優れた機能を発揮します。インターフェイスのシームレスなインスタンス化から、非参照パラメータを参照パラメータに渡すまで、すべてを簡単に実行できます。
インターフェイスのインスタンス化: Type.GetTypeFromCLSID() と Activator.CreateInstance() の魔法
C# で COM インターフェイスのインスタンスを作成すると、コンパイラーはそれを 2 つの別々のメソッド呼び出しに暗黙的に変換します。まず Type.GetTypeFromCLSID() を呼び出して、COM インターフェイスに関連付けられたメタデータを取得します。その後、Activator.CreateInstance() を呼び出して、このインターフェイスを実装するオブジェクトをインスタンス化します。この隠されたプロセスにより、インターフェイス上でコンストラクターを呼び出すことができますが、それ以外の方法では不可能と思われます。
非参照パラメータを参照パラメータに渡す: ローカル変数に関するヒント
C# 4 では、非参照パラメーターを参照パラメーターに簡単に渡すことができます。この場合、コンパイラの秘密兵器は、非参照パラメータ値を格納するローカル変数を作成することです。この変数は参照によって渡され、メソッド呼び出しからの戻り値は事実上破棄されます。これは、参照パラメータの受け渡しを簡素化する巧妙なトリックです。
シミュレートされたインターフェイスのインスタンス化: CoClass 属性が表示されます
インターフェイスを直接インスタンス化することはできませんが、CoClass 属性というインターフェイスをシミュレートする方法があります。 [CoClass(typeof(Test))] 属性をインターフェイスに適用することにより、インターフェイスを実装する具象クラスを指定します。コンパイラはこの属性を検出すると、指定されたクラスのインスタンスを作成することによってインターフェイスのインスタンス化をシミュレートするコードを生成します。
以上が.NET はどのようにして COM タイプとシームレスに相互運用しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。