【发布时间】:2010-11-05 14:59:28
【问题描述】:
总的来说,按照OOP范式,我对封装的理解基本是这样说的:
- 如果成员是私有的,则只能由类访问。
- 如果成员受保护,则只能由基类和任何派生类访问。
- 如果成员是公开的,则任何人都可以访问。
如果我有一个嵌套类,我可以声明一个属性只能由该类及其嵌套的父类访问吗?例如:
Public Class ContainerClass
Public Class NestedClass
Protected myInt As Integer ' <- this is what I am wondering about '
Protected myDbl As Double ' <- this is what I am wondering about '
Sub New()
myInt = 1
myDbl = 1.0
End Sub
End Class
Private myNestedObject As New NestedClass
' this function is illegal '
Public Sub GrowNestedObject(ByVal multiplier As Integer)
myNestedObject.myInt *= multiplier
myNestedObject.myDbl *= multiplier
End Sub
End Class
在示例中,如果 myNestedObject.myInt 或 myNestedObject.myDbl 成员是 Private 或 Protected,我无法从 ContainerClass 实例直接访问这些成员。但是假设我不想让它们公开,因为那样它们就太暴露了:它们可以从任何地方更改,而不仅仅是在 ContainerClass 对象中。将它们声明为 Friend 仍然太弱,因为这将允许它们在应用程序中的任何位置进行更改。
有什么方法可以完成我在这里的目标吗?如果没有,谁能想到一个更明智的方法来实现这样的目标?
【问题讨论】:
标签: vb.net encapsulation public access-modifiers protected