当我检查调试器中的对象时,我发现调试器中的属性比Intellisense或代码中的属性要多得多。
例如,调试器中ASP.NET中的Page对象显示了一个具有值的属性RelativeFilePath。但是当我尝试在代码中使用它时,它不存在。这是为什么?
我查找了MSDN中的属性RelativeFilePath,它存在于移动控件中。不知道为什么它会在调试器中显示为常规的asp.net控件。
答案 0 :(得分:3)
调试器和智能感知器在他们想要显示的内容方面有着截然不同的目标。
Intellisense试图提供可以在对象上有效调用的成员集。基本可访问的成员和扩展方法。这里的目标是帮助指导用户编写有效的代码。
调试器正在尝试检查对象的运行时状态。它几乎不关心可访问性,而是将所有相关信息放在显示屏上。它甚至允许通过用户扩展来定制显示。这意味着您经常会看到对象上根本不存在或用户代码无法访问的成员。
后者为您的场景发挥作用。 Page
类型确实具有RelativeFilePath
属性。但它是内部的,代码无法访问,因此Intellisense不会显示它。调试器不考虑成员显示的可访问性,因此提供了值。
答案 1 :(得分:0)
有几个属性可以附加到类型以获得更好的调试支持。也许其中一个就是你所看到的?
答案 2 :(得分:0)
我猜这是因为它是您无权访问的受保护或私有财产。出于这个原因,你不能在代码中使用它,但你可以在调试器中看到它。