目次:
定義-方向属性とはどういう意味ですか?
C#の方向属性は、呼び出し元と呼び出し先の間のデータの方向の流れに関連する情報でオブジェクトメソッドパラメーターを指定するために使用されるタグです。
方向属性は、メソッドパラメータの方向と戻り値のマーシャリング(アプリケーションまたはプロセスの境界を越えたオブジェクトの転送準備)を制御します。 指向性属性は、共通言語ランタイム(CLR)によって実行されるマネージコードと、CLRの制御外で実行されるアンマネージコードを通信しながら、ランタイムマーシャリングを変更するために適用されます。
Techopediaは方向属性を説明します
InAttributeとOutAttributeは、コンポーネントオブジェクトモデル(COM)インターフェイス定義言語(IDL)属性にマップするために使用される2つのC#方向属性です。 InAttributeはにマップし、OutAttributeはにマップします。 マネージメソッドシグネチャの戻り値は、タイプライブラリにマップされます。 エクスポートタイプライブラリがIn / Outビットを正しく設定するために、メソッドパラメーターに正しい方向属性を指定することが不可欠です。
InAttributeおよびOutAttributeを配列およびフォーマットされた非blittable型(共通のマネージドおよびアンマネージドメモリ表現を持たない)に適用することにより、呼び出し元は呼び出し先の変更を確認します。 これらのタイプに方向属性を適用すると、マーシャリング中の不要なコピーが削減されます。
C#では、InAttributeとOutAttributeは、次のように、呼び出し元と呼び出し先の通信中に2つのキーワードを持つ3つの形式で使用されます。
- 「out」–暗黙
- "ref" –暗黙、
- (指定なし)–(デフォルト)
outおよびrefキーワードは、値型およびシリアル化可能な参照型に使用されます。 refキーワードは、パラメーターが両方向にマーシャリングされることを意味し、outは呼び出し先データ転送を意味します。 refまたはoutが使用されていない場合、これはデータが呼び出し先に転送されることを意味します。
たとえば、.NETクライアントアプリケーションは、入力値をCOMコンポーネントメソッドに送信します。COMコンポーネントメソッドは、入力値の結果を計算し、その結果をクライアントに返します。 入力値と結果に必要なマーシャリングタイプを示すことにより、要求を処理するメソッドのパラメーターに方向属性を適用できます。
方向属性には次の特性があります。
- オプションで、設計時にメソッドパラメーターに適用
- COM相互運用およびプラットフォーム呼び出しのみをサポート
- InAttributeはoutキーワードを持つパラメーターに適用できません
CLR相互運用マーシャラーは、管理メモリと非管理メモリ間でメソッド呼び出し引数と戻り値を処理することにより、実行時にマーシャリングサービスを提供します。 方向属性が定義されていない場合、マーシャラーはパラメータータイプと修飾子(存在する場合)に基づいて方向フローを決定します。 マーシャラーは次のように動作します。
- アンマネージコードから "In"パラメーターとして渡されたデータは上書きされません。 したがって、同時にアクセスされるデータなどの読み取り専用データのみが渡されます。
- 基本またはバイナリ文字列(BSTR)などのオブジェクトを確立されたメモリ割り当てで渡している間、In / Out設定に従って適切な割り当て/割り当て解除シーケンスに従います。
