Tôi muốn tạo một lớp lồng nhau chỉ có thể hiển thị và được hiển thị từ lớp cha.
Nhưng tôi cũng muốn có thể sử dụng một thể hiện của lớp lồng nhau thông qua một biến công khai của lớp cha.
Tôi đã cố gắng đặt lớp lồng nhau là riêng tư hoặc đặt hàm tạo của lớp lồng nhau là riêng tư, nhưng nó sẽ không biên dịch.
Có thể thực hiện việc này trong .NET không?Các lớp lồng nhau riêng
này biên dịch và các công trình, nhưng các lớp lồng nhau có thể được sử dụng bởi bất cứ ai:
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
Điều duy nhất đặc biệt về lớp lồng nhau là nó có thể truy cập các thành viên riêng tư và được bảo vệ của lớp chứa (miễn là nó có tham chiếu đến một). Đây có phải là chức năng của lớp lồng nhau mà bạn quan tâm hoặc bạn đang cố gắng làm điều gì khác không? –
Chủ yếu là tôi đang cố gắng giữ lớp lồng nhau ra khỏi Intellisense, và cũng có một bảo hiểm mà nó không thể được khởi tạo trừ lớp cha. – mcu
Với tôi, các định nghĩa lớp riêng tư lồng nhau chỉ nên có sẵn cho lớp đang nắm giữ, giống như các biến riêng tư, ở chỗ chúng là riêng tư với một lớp đó. Nhưng nếu lớp giữ instantiates nó và gán nó vào một biến công khai bên trong lớp đang nắm giữ, instance sẽ được truy cập đến bất cứ ai như là một trường của lớp đang nắm giữ. Nó có vẻ giống như một hành vi đối tượng rất tự nhiên đối với tôi. Oh well. – mcu