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)のみが「非公開メンバー」ノードの下に表示されます。hash2の場合もprotected
、protected internal
「HashSizeValue」や「HashValue」などのメンバーが表示されます。
なぜこれが起こるのですか?この動作の背後にあるルールは何ですか?