2012-07-21 2 views
3

Я предположил, что все непубличные (т. Е. Частные, защищенные, внутренние и внутренние защищенные) члены объектов C# переходят под «негосударственными членами», когда я смотрю на объекты в окне просмотра Visual Studio. Но потом я заметил anamoly с этим кодом:Что входит в узел «Непубличные члены» в окне «Визуальные окна»?

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

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

hash1 's "непубличных Члены" выглядит следующим образом:

hash1 in Watch Window

, тогда как hash2' s "непубличных Члены" выглядит следующим образом:

hash2 in Watch Window

Так что похоже на hash1, толькоПоле(m_bDisposed) появляется под заголовком «Non-Public members», где для hash2, даже protected и protected internal таких членов, как «HashSizeValue» и «HashValue».

Почему это происходит? Каковы правила этого поведения?

+0

SHA1Cng заявлен ** запечатан **. Таким образом, его защищенные члены больше не доступны никакому производному классу. –

ответ

3

Поведение, которое вы видите здесь, является ошибкой. Отладчик C# не должен показывать статические члены в этом сценарии. Я подтвердил это с нынешним владельцем базы кода, и он собирается записать ошибку для следующей версии Visual Studio.

Конкретный сценарий, при котором это происходит,

  • Только мой код включен
  • типа определяется, что определенно, что узел непользовательских
  • типа ссылки и объекта экземпляр разные (переключатель hash2 к SHA1Cnf и проблема исчезает)

Примечание могут быть и другие сценарии, где это появляется. Это поведение, которое я смог сузить при отладке/экспериментировании, которое я сделал.