编程语言
首页 > 编程语言> > c#-Visual Studio的“监视”窗口中的“非公共成员”节点中有什么内容?

c#-Visual Studio的“监视”窗口中的“非公共成员”节点中有什么内容?

作者:互联网

我假定当我在Visual Studio的“监视窗口”中查看对象时,C#对象的所有非公共(即私有,受保护,内部和内部受保护)成员都位于“非公共成员”下.但是后来,我注意到了这段代码:

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

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

hash1的“非公共成员”如下所示:

而hash2的“非公共成员”看起来像这样:

因此,对于hash1来说,似乎只有私有字段(m_bDisposed)出现在“非公共成员”节点下,对于hash2,甚至在受保护和受保护的内部成员(如“ HashSizeValue”和“ HashValue”)中也都出现了.

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

解决方法:

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

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

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

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

标签:vsx,debugging,visual-studio-debugging,c
来源: https://codeday.me/bug/20191201/2077704.html