使用 DebuggerTypeProxy 属性
更新:2007 年 11 月
本主题适用于:
版本 |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
速成版 |
![]() |
![]() |
![]() |
![]() |
标准版 |
||||
专业团队版 |
表格图例:
![]() |
适用 |
![]() |
不适用 |
![]() |
默认情况下隐藏的一条或多条命令。 |
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"