Во время очистки некоторого кода, написанного сегодня кем-то другим, я изменил модификатор доступа с Public
до Private
на переменную class/member/field. Я ожидал длинный список ошибок компилятора, которые я использую для "рефакторинга/доработки/пересмотра" кода, который использовал эту переменную. Представьте мое удивление, когда я не получил никаких ошибок. После просмотра выясняется, что другой экземпляр класса может получить доступ к закрытым членам другого экземпляра, объявленного в классе. Полностью исключен.
Это нормально? Я кодировал в .NET с самого начала и никогда не сталкивался с этой проблемой и не читал об этом. Я, возможно, наткнулся на него раньше, но только "смутно заметил" и двинулся дальше. Может ли кто-нибудь объяснить это поведение мне? Я хотел бы знать, почему я могу это сделать. Пожалуйста, объясните, не просто скажите мне правило. Я делаю что-то неправильно? Я нашел это поведение как в С#, так и в VB.NET. Код, похоже, использует возможность доступа к закрытым переменным. Недостатком является то, что программист создал большую пластину спагетти.
С уважением,
- Полностью запутанный
Class Jack
Private _int As Integer
End Class
Class Foo
Public Property Value() As Integer
Get
Return _int
End Get
Set(ByVal value As Integer)
_int = value * 2
End Set
End Property
Private _int As Integer
Private _foo As Foo
Private _jack As Jack
Private _fred As Fred
Public Sub SetPrivate()
_foo = New Foo
_foo.Value = 4 'what you would expect to do because _int is private
_foo._int = 3 'TOTALLY UNEXPECTED
_jack = New Jack
'_jack._int = 3 'expected compile error
_fred = New Fred
'_fred._int = 3 'expected compile error
End Sub
Private Class Fred
Private _int As Integer
End Class
End Class