Visual Studio 监视窗口中的“非公共成员”节点显示什么?

2023-12-30

我假设 C# 对象的所有非公共(即私有、受保护、内部和内部受保护)成员都位于“非公众会员“当我在 Visual Studio 观察窗口中查看对象时。但是随后,我注意到以下代码存在异常:

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

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

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

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

所以对于 hash1 来说,只有private字段 (m_bDispose) 出现在“非公众会员“ 节点,其中 hash2,甚至protected and protected internal像“HashSizeValue”和“HashValue”这样的成员出现在其中。

为什么会出现这种情况?这种行为背后的规则是什么?


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

出现这种情况的具体场景是

  • 仅我的代码已启用
  • 该类型是在确定为非用户程序集中定义的
  • 引用和对象实例的类型不同(切换hash2 to SHA1Cnf然后问题就消失了)

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Visual Studio 监视窗口中的“非公共成员”节点显示什么? 的相关文章

随机推荐