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