DebuggerTypeProxy 属性の使用 (C#、Visual Basic の場合、C +/cli CLI)Using DebuggerTypeProxy Attribute (C#, Visual Basic, C++/CLI)

DebuggerTypeProxyAttribute では、ある型のプロキシ (代理) を指定し、その型をデバッガー ウィンドウで表示する方法を変更します。DebuggerTypeProxyAttribute specifies a proxy, or stand-in, for a type and changes the way the type is displayed in debugger windows. プロキシを指定した変数を表示すると、元の型の代理としてプロキシが表示されます。When you view a variable that has a proxy, the proxy stands in for the original type in the display. デバッガーの変数ウィンドウには、プロキシ型のパブリック メンバーのみが表示されます。The debugger variable window displays only the public members of the proxy type. プライベート メンバーは表示されません。Private members are not displayed.

この属性は次の対象に適用できます。This attribute can be applied to:

  • 構造体Structures
  • クラスClasses
  • アセンブリAssemblies


ネイティブ コードは、この属性は C + でのみサポート/cli CLI コード。For native code, this attribute is supported only in C++/CLI code.

型プロキシ クラスには、プロキシで置換される型の引数を使用するコンストラクターが必要です。A type proxy class must have a constructor that takes an argument of the type that the proxy will replace. デバッガーでは、対象となる型の変数を表示するときに、毎回、新しい型プロキシ クラスのインスタンスが作成されます。The debugger creates a new instance of the type proxy class every time it needs to display a variable of the target type. その結果、パフォーマンスが低下する可能性があります。This can have performance implications. そのため、コンストラクターでの作業は必要最小限に抑えます。As a result, you should not do any more work in the constructor than absolutely necessary.

パフォーマンスの低下を最小限にするために、式エバリュエーターでは、型の表示プロキシに関する属性はチェックされません。ただし、デバッガー ウィンドウで + 記号をクリックして型を展開したときや、DebuggerBrowsableAttribute を使用するときはチェックされます。To minimize performance penalties, the expression evaluator does not examine the attributes on the display proxy of the type unless the type is expanded by the user clicking the + symbol in the debugger window or by the use of DebuggerBrowsableAttribute. そのため、表示型に属性を指定するのは避けます。Therefore, you should not place attributes on the display type itself. 属性は、表示型の本体で使用できるようにします。Attributes can and should be used in the body of the display type.

型プロキシは、属性の対象となるクラスに入れ子にした、プライベート クラスにすることをお勧めします。It is a good idea for the type proxy to be a private nested class within the class that the attribute targets. こうすることで、内部のメンバーに簡単にアクセスできます。This allows it to access internal members easily.

DebuggerTypeProxyAttribute 継承できますので、これらの派生クラスは、独自の型のプロキシを指定しない限り、基底クラスの型のプロキシが指定されている場合は、派生クラスでは、適用します。DebuggerTypeProxyAttribute can be inherited, so if a type proxy is specified on a base class it will apply to any derived classes, unless those derived classes specify their own type proxy.

DebuggerTypeProxyAttribute をアセンブリ レベルで使用する場合は、プロキシに置換される型を Target パラメーターで指定します。If DebuggerTypeProxyAttribute is used at the assembly level, the Target parameter specifies the type which the proxy will replace.

と共にこの属性を使用する方法の例についてはDebuggerDisplayAttributeDebuggerTypeProxyAttributeを参照してくださいDebuggerDisplay 属性を使用してします。For an example of how to use this attribute along with DebuggerDisplayAttribute and DebuggerTypeProxyAttribute, seeUsing the DebuggerDisplay Attribute.

ジェネリックと DebuggerTypeProxy の使用Using Generics with DebuggerTypeProxy

ジェネリックのサポートは限定的です。Support for generics is limited. C# では、DebuggerTypeProxy はオープン型のみをサポートします。For C#, DebuggerTypeProxy supports only open types. オープン型 (構築されていない型とも呼ばれます) とは、その型パラメーターの引数によってインスタンス化されていないジェネリック型のことです。An open type, also called an unconstructed type, is a generic type that has not been instantiated with arguments for its type parameters. クローズ型 (構築された型とも呼ばれます) は、サポートされていません。Closed types, also called constructed types, are not supported.

オープン型の構文は次のようになります。The syntax for an open type looks like this:


DebuggerTypeProxy 内でジェネリック型を対象として使用する場合は、この構文を使用する必要があります。If you use a generic type as a target in DebuggerTypeProxy, you must use this syntax. DebuggerTypeProxy の機構は、型パラメーターを推論します。The DebuggerTypeProxy mechanism infers the type parameters for you.

C# のオープンおよびクローズされた型の詳細については、次を参照してください。、 c# 言語仕様、セクション「20.5.2 を開くとクローズ型。For more information on open and closed types in C# see the C# Language Specification, section 20.5.2 Open and closed types.

Visual Basic にはクローズ型の構文はないため、Visual Basic で同じ処理はできません。Visual Basic does not have open type syntax, so you cannot do the same thing in Visual Basic. 代わりに、オープン型の名前の文字列形式を使用する必要があります。Instead, you must use a string representation of the open type name.


関連項目See Also