Ama*_*Ama 4 vb.net encapsulation class
我来自VBA世界,将代码细分为类,名称空间和模块的选项是有限的.现在我刚刚进入了一个选项很多的世界,我感到迷茫.
我想知道在另一个类中声明一个类的目的是什么?(见下面的例子)
Class FirstClass
Public OnePropertyInside As String
Class SecondClass
Public AnotherProperty As String
End Class
End Class
Run Code Online (Sandbox Code Playgroud)
如果我创建FirstClass
(例如myFirstClass
)的新实例,SecondClass
则不实例化.更为古怪(至少对我来说),是知识分子为我提供的myFirstClass.SecondClass
.显然,因为类没有实例化,所以我无法访问它的任何成员.
那么,只有SecondClass
包含shared
成员时才有用吗?为了尝试回答这个问题,我在其中添加了一个共享成员SecondClass
:
Class FirstClass
Public OnePropertyInside As String
Class SecondClass
Public AnotherProperty As String
Public Shared SharedProperty As String
End Class
End Class
Run Code Online (Sandbox Code Playgroud)
我运行了一些带来次要问题的测试(参见代码中的注释)
Sub Main()
Dim myFirstClass As New FirstClass
'Works as expected
Console.WriteLine(myFirstClass.OneProperty)
'What is the difference between the two lines below?
Console.WriteLine(myFirstClass.SecondClass.SharedProperty)
Console.WriteLine(FirstClass.SecondClass.SharedProperty)
'This line cannot be compiled, this demonstrates SecondClass is not instantiated when FirstClass is.
Console.WriteLine(myFirstClass.SecondClass.AnotherProperty)
Dim mySecondClass As New FirstClass.SecondClass
'Works as expected, but I feel this hierarchy should better be dealt with through a namespace statement?
Console.WriteLine(mySecondClass.AnotherProperty)
End Sub
Run Code Online (Sandbox Code Playgroud)
你可以把它想象成最内层的类是一个帮助类.甚至可能根本不需要使用它.将内部类(或简称嵌套类)嵌套在外部类中,可以访问外部类的所有成员.您甚至可以访问该初始外部类中的私有成员.
编辑:为了澄清,我的意思是说内部可以访问外部的私有成员,而不是相反.