What goes in the "Non-Public members" node in Visual Studio's Watch window?
===

I assumed that all Non-Public (ie, private, protected, internal, and internal protected) members of C# objects go under "*Non-Public Members*" when I look at objects in Visual Studio's Watch Window. But then, I noticed an anamoly with this code:

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

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


`hash1`'s "Non-Public Members" looks like this:

![hash1 in Watch Window][1]

whereas `hash2`'s "Non-Public Members" looks like this:

![hash2 in Watch Window][2]

So it seems like for hash1, only the `private` field (m_bDisposed) appears under the "*Non-Public members*" node, where for hash2, even `protected` and `protected internal` members like "HashSizeValue" and "HashValue" appear in it. 

Why does this happen? What are the rules behind this behaviour?


  [1]: http://i.stack.imgur.com/6C2Nr.png
  [2]: http://i.stack.imgur.com/tUip8.png