DebuggerTypeProxyAttribute 指定一个类型的代理或替身,并更改该类型在调试器窗口中的显示方式。 查看具有代理的变量时,代理代表 显示中的原始类型。 调试器变量窗口仅显示代理类型的公共成员。 不显示专用成员。
此属性可以应用于:
- 结构
- 课程
- 程序集
注释
对于本机代码,此属性仅在 C++/CLI 代码中受支持。
类型代理类必须具有一个构造函数,该构造函数采用代理要替换的类型参数。 每次需要显示目标类型的变量时,调试器都会创建类型代理类的新实例。 这可能导致性能影响。 因此,请避免在构造函数中执行任何不必要的工作。
为了尽量减少性能损失,表达式计算器不会检查类型的显示代理上的属性,除非用户单击调试器窗口中的 + 符号或使用 DebuggerBrowsableAttribute扩展了该类型。 因此,不要将属性放在显示类型本身上。 应该并可以在显示类型的正文中使用特性。
将类型代理作为属性目标类中的私有嵌套类是一个好主意。 这允许它轻松访问内部成员。
DebuggerTypeProxyAttribute 可以继承,因此,如果在基类上指定类型代理,则它适用于任何派生类,除非这些派生类指定其自己的类型代理。
如果在 DebuggerTypeProxyAttribute 程序集级别使用,则 Target 参数指定要替换的代理的类型。
有关如何同时使用此属性与DebuggerDisplayAttribute 和DebuggerTypeProxyAttribute 的示例,请参阅 Using the DebuggerDisplay Attribute。
重要
如果在 变量窗口选项中选择“显示对象的原始结构 ”选项,则忽略该 DebuggerDisplay 属性。 此设置位于“所有设置>常规”>部分的“工具>选项”窗格中。
重要
如果在 变量窗口选项中选择“显示对象的原始结构 ”选项,则忽略该 DebuggerDisplay 属性。 此设置位于“调试>常规”部分的“工具>选项”对话框中。
将泛型与 DebuggerTypeProxy 配合使用
对泛型的支持有限。 对于 C#,DebuggerTypeProxy 仅支持开放类型。 开放类型(也称为非结构类型)是一种泛型类型,该类型未使用其类型参数的参数实例化。 不支持称为构造类型的封闭类型。
开放类型的语法如下所示:
Namespace.TypeName<,>
如果使用泛型类型作为目标 DebuggerTypeProxy,则必须使用此语法。 该 DebuggerTypeProxy 机制为你推断类型参数。
有关 C# 中打开和关闭类型的详细信息,请参阅 C# 语言规范,第 20.5.2 部分打开和关闭类型。
Visual Basic 没有开放类型语法,因此无法在 Visual Basic 中执行相同的作。 相反,必须将开放类型名称表示为字符串。
"Namespace.TypeName'2"