Доступ к закрытой переменной-члену класса с использованием его объекта (экземпляра) - PullRequest
1 голос
/ 06 декабря 2008

Вот фрагмент кода 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 ++ также позволяет это ..

Есть предположения, что может быть причиной этого?

Edit:

Я думаю, что эта строка из ссылки msdn, данной Роборгом, объясняет это поведение «Код в типе, который объявляет закрытый элемент, включая код внутри содержащихся типов, может получить доступ к элементу»

Ответы [ 2 ]

3 голосов
/ 06 декабря 2008

Вот раздел об уровнях доступа в MSDN .

3 голосов
/ 06 декабря 2008

Ваш вопрос довольно запутанный, но я думаю, что понял это как: «Почему я могу получить доступ к частным переменным другого экземпляра (из моего класса)?»

И вы правы - на всех языках ООП, которые я использовал, вы можете получить доступ к закрытым переменным из других экземпляров именно потому, что права доступа основаны на том, где находится код, а не на том, к какому экземпляру объекта он «принадлежит».

В противном случае может быть сложно реализовать конструкторы копирования или операторы равенства.

...