当我在 Visual Studio 的监视窗口中查看对象时,我假设 C# 对象的所有非公共(即私有、受保护、内部和内部受保护)成员都在“非公共成员”下。但是后来,我注意到这段代码有一个异常:
class HashDerived : System.Security.Cryptography.HashAlgorithm { ... }
HashAlgorithm hash1 = new HashDerived();
HashAlgorithm hash2 = new System.Security.Cryptography.SHA1Cng();
hash1
的“非公众成员”是这样的:
而hash2
的“非公共成员”看起来像这样:
因此,对于 hash1,似乎只有private
字段 (m_bDisposed) 出现在“ Non-Public members ”节点下,对于 hash2,evenprotected
和protected internal
“HashSizeValue”和“HashValue”等成员出现在其中。
为什么会这样?这种行为背后的规则是什么?