DebuggerTypeProxy 属性の使用
このトピックの内容は、次の製品に該当します。
エディション |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
Express |
|||||
Pro、Premium、Ultimate |
DebuggerTypeProxyAttribute では、ある型のプロキシ (代理) を指定し、その型をデバッガー ウィンドウで表示する方法を変更します。 プロキシを指定した変数を表示すると、元の型の代理としてプロキシが表示されます。 デバッガーの変数ウィンドウには、プロキシ型のパブリック メンバーのみが表示されます。 プライベート メンバーは表示されません。
この属性は次の対象に適用できます。
構造体
クラス
アセンブリ
型プロキシ クラスには、プロキシで置換される型の引数を使用するコンストラクターが必要です。 デバッガーでは、対象となる型の変数を表示するときに、毎回、新しい型プロキシ クラスのインスタンスが作成されます。 その結果、パフォーマンスが低下する可能性があります。 そのため、コンストラクターでの作業は必要最小限に抑えます。
パフォーマンスの低下を最小限にするために、式エバリュエーターでは、型の表示プロキシに関する属性はチェックされません。ただし、デバッガー ウィンドウで + 記号をクリックして型を展開したときや、DebuggerBrowsableAttribute を使用するときはチェックされます。 そのため、表示型に属性を指定するのは避けます。 属性は、表示型の本体で使用できるようにします。
型プロキシは、属性の対象となるクラスに入れ子にした、プライベート クラスにすることをお勧めします。 こうすることで、内部のメンバーに簡単にアクセスできます。
DebuggerTypeProxyAttribute をアセンブリ レベルで使用する場合は、プロキシに置換される型を Target パラメーターで指定します。
DebuggerDisplayAttribute および DebuggerTypeProxyAttribute と共にこの属性を使用する方法の例については、「DebuggerDisplay 属性の使用」を参照してください。
ジェネリックと DebuggerTypeProxy の使用
ジェネリックのサポートは限定的です。 C# では、DebuggerTypeProxy はオープン型のみをサポートします。 オープン型 (構築されていない型とも呼ばれます) とは、その型パラメーターの引数によってインスタンス化されていないジェネリック型のことです。 クローズ型 (構築された型とも呼ばれます) は、サポートされていません。
オープン型の構文は次のようになります。
Namespace.TypeName<,>
DebuggerTypeProxy 内でジェネリック型を対象として使用する場合は、この構文を使用する必要があります。 DebuggerTypeProxy の機構は、型パラメーターを推論します。
C# のオープン型とクローズ型の詳細については、「C# 言語仕様」の「20.5.2 オープン型とクローズ型」を参照してください。
Visual Basic にはクローズ型の構文はないため、Visual Basic で同じ処理はできません。 代わりに、オープン型の名前の文字列形式を使用する必要があります。
"Namespace.TypeName'2"