私有嵌套类

mcu*_*mcu 7 .net vb.net oop nested class

我想创建一个只能从父类可见并实例化的嵌套类.
但我也希望能够通过父类的公共变量使用嵌套类的实例.
我尝试将嵌套类设为私有,或者使嵌套类的构造函数为私有,但它不会编译.
是否可以在.NET中执行此操作?

这编译和工作,但嵌套类可以被任何人使用:

 Public Class OuterClass
        Public X As Integer = 123
        Public NestedClassInstance As New NestedClass(Me)

        Public Class NestedClass
            Private Parent As OuterClass

            Public Sub New(ByVal _Parent As OuterClass)
                Parent = _Parent
            End Sub

            Public Sub GetParentX()
                Debug.WriteLine("X = " & Parent.X.ToString)
            End Sub
        End Class
    End Class

    Sub Main()
        Dim OuterClassInstance As New OuterClass
        OuterClassInstance.NestedClassInstance.GetParentX()
    End Sub
Run Code Online (Sandbox Code Playgroud)

vcs*_*nes 7

通常,Private嵌套类实现接口或继承另一个类,并公开接口/基类.当您想要将实现隐藏到父类时,这非常有用.像这样的东西:

Module EntryPoint
    Sub Main()
        Dim OuterClassInstance As New OuterClass
        OuterClassInstance.NestedClassInstance.GetParentX()
    End Sub
End Module

Public Class OuterClass
    Public X As Integer = 123
    Public NestedClassInstance As ISomeImplementation = New NestedClass(Me)

    Private Class NestedClass
        Implements ISomeImplementation
        Private Parent As OuterClass

        Public Sub New(ByVal _Parent As OuterClass)
            Parent = _Parent
        End Sub

        Public Sub GetParentX() Implements ISomeImplementation.GetParentX
            Debug.WriteLine("X = " & Parent.X.ToString)
        End Sub
    End Class
End Class

Public Interface ISomeImplementation
    Sub GetParentX()
End Interface
Run Code Online (Sandbox Code Playgroud)