【问题标题】:Access private member variable of the class using its object (instance)使用其对象(实例)访问类的私有成员变量
【发布时间】:2010-09-25 15:47:36
【问题描述】:

这是一个VB.NET代码sn-p

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++也允许这样做..

你猜这是什么原因?

编辑:

我认为 RoBorg 给出的 msdn 链接中的这一行解释了这种行为 "声明私有元素的类型中的代码,包括包含类型中的代码,都可以访问该元素"

【问题讨论】:

    标签: oop access-specifier


    【解决方案1】:

    您的问题很令人困惑,但我认为我已将其理解为: “为什么我可以访问(我的班级的)另一个实例的私有变量?”

    你是对的 - 在我使用过的所有 OOP 语言中,你都可以从其他实例访问私有变量,这正是因为访问权限基于代码所在的位置,而不是它“属于”哪个对象实例。

    否则可能很难实现复制构造函数或相等运算符。

    【讨论】:

    • 我第一次遇到这个问题,自动完成功能让我有机会访问另一个实例的私有方法。我同意你关于复制构造函数的观点,但从封装的角度来看,我仍然觉得它是错误的。
    【解决方案2】:

    这是关于access levels in MSDN的部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-18
      • 1970-01-01
      • 2012-09-03
      • 2015-11-15
      • 1970-01-01
      相关资源
      最近更新 更多