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

StackOverflow https://stackoverflow.com/questions/346127

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top