Dot-Net

私有嵌套類

  • June 7, 2012

我想創建一個嵌套類,它只能對父類可見並從父類實例化。

但我也希望能夠通過父類的公共變數來使用嵌套類的實例。

我嘗試將嵌套類設為私有,或將嵌套類的建構子設為私有,但它不會編譯。

是否可以在 .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

通常 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

引用自:https://stackoverflow.com/questions/10937565