一般に、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 として宣言しても、アプリケーション内のどこからでも変更できるため、依然として弱すぎます。
私がここで行っていることを達成する方法はありますか? そうでない場合、このようなことを達成するためのより賢明な方法を考えられる人はいますか?