Когда вы делаете это, и внутренний класс становится доступным для других классов (его доступность Public
или Friend
), внешний класс в основном просто работает как пространство имен.Так, например, используя ваш пример, вы можете создать новый объект вложенного класса, даже не создавая один из внешних классов:
Dim x As New FirstClass.SecondClass()
Наиболее очевидным преимуществом является структурная организация кода, очень похожая напространства имен и кодовые файлы.Так, например, весьма часто использовать вложенные классы для констант, чтобы помочь лучше организовать их:
Public Class Urls
Public Class Processing
Public Const Submit As String = "..."
Public Const Cancel As String = "..."
End Class
Public Class Reporting
Public Const Daily As String = "..."
Public Const Weekly As String = "..."
End Class
End Class
' ...
Dim url As String = Urls.Reporting.Daily
Однако, за исключением узкого набора ситуаций, когда подобные вещи полезны, большинство людей предпочли бывообще не вкладывать публичные занятия.
Однако, как уже упоминали другие, единственное место, где вы действительно увидите, что вложенные классы используются довольно регулярно, это Private
.Если вам нужен небольшой вспомогательный класс, который бесполезен для написания кода вне вашего класса, нет никаких причин выставлять его.Даже если вы установите его доступность Friend
, он все равно будет виден всем другим классам в том же проекте.Поэтому, если вы действительно хотите скрыть это от всего остального, вы захотите сделать его вложенным частным классом.Например:
Public Class MyClass
Public Function GetTheIdOfSomething() As Integer
Dim d As Details = GetDetailsAboutSomething()
If d.Value Is Nothing Then
Return d.Id
Else
Throw New Exception()
End If
End Sub
Private Function GetDetailsAboutSomething() As Details
' ... return a Details object
End Function
Private Class Details
Public Property Id As Integer
Public Property Value As String
End Class
End Class