Доступ к закрытой переменной-члену класса с использованием его объекта (экземпляра)
-
19-08-2019 - |
Вопрос
Вот VB.NET фрагмент кода
Public Class OOPDemo
Private _strtString as String
Public Function Func(obj as OOPDemo) as boolean
obj._strString = "I can set value to private member using a object"
End Function
End Class
Я думал, что мы не можем получить доступ к закрытым элементам, используя объект, но, возможно, CLR позволяет нам это сделать.Таким образом, это означает, что модификаторы доступа основаны на типе, а не на экземпляре этого типа.Я также слышал, что c ++ также допускает это..
Есть какие-нибудь догадки, что могло быть причиной этого?
Редактировать:
Я думаю, что эта строка из ссылки msdn, предоставленной RoBorg, объясняет это поведение "Код в типе, который объявляет закрытый элемент, включая код внутри содержащихся типов, может получить доступ к элементу "
Решение
Ваш вопрос довольно запутанный, но я думаю, что понял его как:"Почему я могу получить доступ к закрытым переменным другого экземпляра (моего класса)?"
И вы правы - на всех языках ООП, которые я использовал, вы можете получать доступ к закрытым переменным из других экземпляров именно потому, что права доступа основаны на том, где находится код, а не на том, какому экземпляру объекта он "принадлежит".
В противном случае может быть трудно реализовать конструкторы копирования или операторы равенства.
Другие советы
Вот раздел о уровни доступа в MSDN.