总的来说,按照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
在示例中,如果这些成员是 Private 或 Protected,我无法从 ContainerClass 的实例直接访问 myNestedObject.myInt 或 myNestedObject.myDbl。但是假设我不想让它们公开,因为那样它们就太暴露了:它们可以从任何地方更改,而不仅仅是在 ContainerClass 对象中。将它们声明为 Friend 仍然太弱,因为这将允许它们在应用程序中的任何位置进行更改。
有什么办法可以完成我在这里的目标吗?如果没有,谁能想到一种更明智的方法来实现这样的目标?