Visual Studio Watch窗口中的“非公共成员”节点是什么?

时间:2012-07-21 18:16:02

标签: c# debugging visual-studio-debugging vsx

当我在Visual Studio中查看对象时,我认为C#对象的所有非公共(即私有,受保护,内部和内部受保护)成员都位于“非公共成员”下观察窗口。但后来,我注意到这个代码的一个分析:

   class HashDerived : System.Security.Cryptography.HashAlgorithm { ... }

   HashAlgorithm hash1 = new HashDerived();
   HashAlgorithm hash2 = new System.Security.Cryptography.SHA1Cng();

hash1的“非公众成员”看起来像这样:

hash1 in Watch Window

hash2的“非公开会员”看起来像这样:

hash2 in Watch Window

所以对于hash1来说,只有private字段(m_bDisposed)出现在“非公共成员”节点下,其中对于hash2,甚至是protected和其中包含“HashSizeValue”和“HashValue”等protected internal个成员。

为什么会这样?这种行为背后的规则是什么?

1 个答案:

答案 0 :(得分:3)

您在此处看到的行为是一个错误。在此方案中,C#调试器不应显示静态成员。我与代码库的当前所有者确认了这一点,他将为Visual Studio的下一个版本提交一个错误。

发生这种情况的具体方案是

  • 启用了我的代码
  • 类型定义为确定为非用户程序集的内容
  • 引用和对象实例的类型不同(将hash2切换为SHA1Cnf,问题就会消失)

请注意,可能会出现其他情况。这是我在调试/实验中能够缩小范围的行为。