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,问题消失了)

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

上一篇:Java+Selenium 如何处理Try/Catch


下一篇:php-在Yii中调试SQL查询. CFileLogRoute与CWebLogRoute