2009-11-30 5 views
6

私はまだ深い知識と古い知識をC/C++から少し浅い.Netの知識にマップしようとしています。今日では、C#では "as"(そして暗黙のうちに "is"とキャスト)されています。COMのQueryInterfaceやC++のdynamic_castと比較して、「as」のコストはいくらですか?

"as"の私のメンタルモデルは、QueryInterfaceまたはdynamic_cast(ポインタ引数を持つdynamic_cast、参照ではない)ということです。私の質問は二重です:

  1. 私の比較は公正ですか?
  2. 「as」の相対コストはQueryInterfaceまたはdynamic_castと比べてどうですか?

答えて

4
  1. はい、比較はポインタを扱う場合は特に、公正です。 3つのそれぞれは成功し、ターゲット・タイプの非NULLポインターを戻すか、またはヌルを戻します。

  2. .NETのCOMオブジェクトを操作するときにas演算子を実際に使用することができます。これは、に相当し、managed/COM interopのオーバーヘッドはわずかです。 CLRの内部では、as演算子はであり、COMではQueryInterface、C++ではdynamic_castと比較して、極端に軽量です。何らかの理由で私がにがの動的キャストを使用していた場所では、asオペレータが1つのサンプルをプロファイリングで見たことはありませんでした。また、動的型付けされた実行時バインド言語(StringTemplate)、私はそれが何かを意味すると仮定します。 :)

関連する問題