私有嵌套类

时间:2012-06-07 18:21:18

标签: .net vb.net oop class nested

我想创建一个只能从父类可见并实例化的嵌套类 但我也希望能够通过父类的公共变量使用嵌套类的实例 我尝试将嵌套类设为私有,或者使嵌套类的构造函数为私有,但它不会编译 是否可以在.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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

您不能拥有通过公共接口公开的私有嵌套类。

它是一个或者一个命题 - 嵌套类是私有的,还是不是。

一个选项是声明一个接口,该接口包含您希望嵌套类实现的契约(使用一些重构工具,您可以从类中提取接口)并公开接口,同时保持嵌套类的私有。

答案 2 :(得分:0)

如果您只是想阻止客户在库外使用您的对象,那么只需创建构造函数friend即可。这样,只有程序集中的代码才能创建对象。