VB.NET中Module的概念

今天学习VB.NET,发现VB.NET里面有一个Module的东西,如下图(-1)所示:

VB.NET中Module的概念_第1张图片

图-1

上网查了一下VB.NET里面的Module,才发现这是学习VB.NET遇到的第一个典型的问题就是:为什么VB.NET中会有一个Module的东西,而在C#等语言中是没有的呢?

首先,这是一个历史原因。早先的VB语言都有模块类模块的概念。所谓模块一般就是存放公用的一些方法(Sub)或者函数(Function),而类模块,相当于就是我们经常所说的类的概念。 

模块(Module)里面可以直接有方法,这些方法自动就是静态的(或者称为共享的——VB.NET中的关键字是Shared),这些方法可以直接调用,所以Module是无法实例化,也没有必要实例化的

模块无法继承,也无法实现接口。

模块里面可以有类,但其实这个类并不需要真的通过模块作为前缀来引用。所以模块有点虚的概念

模块可以被组织到命名空间中去,因为模块其实是个虚的,所以它的方法也可以直接外层的命名空间调用

Module代码范例:

 1 '用命名空间封装Module
 2 Namespace VBModuleTest
 3     ''' 
 4     ''' 模块无法继承,无法实现接口
 5     ''' 
 6     ''' 
 7     Module ModuleTest
 8         ''' 
 9         ''' 模块里面的方法都是静态的,无需实例化,也无从实例化
10         ''' 
11         ''' 
12         Sub Main()
13             'new一个Class1实例
14             'Dim clazz As Class1 = New Class1这样也是对的
15             Dim clazz As Class1 = New Class1()
16             clazz.Name = "Class1类"
17             Console.WriteLine(clazz.Name)
18             Console.WriteLine(clazz.GetClassName())
19             Console.ReadKey()
20         End Sub
21         ''' 
22         ''' 有返回值的方法,用Function来声明
23         ''' 
24         ''' 
25         ''' 
26         Public Function Test1() As String
27             Console.WriteLine("这个是Module里面的Test1方法")
28             Return ""
29         End Function
30         ''' 
31         ''' 无返回值的方法,用Sub来声明
32         ''' 
33         ''' 
34         Public Sub Test2()
35             Console.WriteLine("这个是Module里面的Test2方法")
36         End Sub
37 
38         ''' 
39         ''' 类型可以放在模块里面,但主要的现实意义在于分类存放而已,放在模块里面并不影响该类型对外的引用。
40         ''' 例如我们并不一定需要用VBModuleTest.ModuleTest.Class1,
41         ''' 而是直接通过VBModuleTest.Class1就可以对其进行引用
42         ''' 
43         ''' 
44         Public Class Class1 : Implements IComparable
45             ''' 
46             ''' 声明属性
47             ''' 
48             ''' 
49             Private _name As String
50             Public Property Name() As String
51                 Get
52                     Return _name
53                 End Get
54                 Set(ByVal value As String)
55                     Me._name = value
56                 End Set
57             End Property
58 
59             ''' 
60             ''' 声明方法
61             ''' 
62             ''' 
63             ''' 
64             Public Function GetClassName() As String
65                 Test1()
66                 ModuleTest.Test2()
67                 Return Me.GetType().ToString()
68             End Function
69 
70             ''' 
71             ''' 实现接口中的方法
72             ''' 
73             ''' 
74             ''' 
75             ''' 
76             Public Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo
77                 Return 1
78             End Function
79         End Class
80     End Module
81 End Namespace

这里的代码只是纯粹为演示目的而写的,没有任何具体意义 。

你可能感兴趣的:(VB.NET中Module的概念)