VB.NET中Module的概念

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

图-1学习

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

首先,这是一个历史缘由。早先的VB语言都有模块类模块的概念。所谓模块通常就是存放公用的一些方法(Sub)或者函数(Function),而类模块,至关于就是咱们常常所说的类的概念。 3d

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

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

模块里面能够有类,但其实这个类并不须要真的经过模块做为前缀来引用。因此模块有点虚的概念继承

模块能够被组织到命名空间中去,由于模块实际上是个虚的,因此它的方法也能够直接外层的命名空间调用接口

Module代码范例:ci

 1 '用命名空间封装Module
 2 Namespace VBModuleTest
 3     ''' <summary>
 4     ''' 模块没法继承,没法实现接口
 5     ''' </summary>
 6     ''' <remarks></remarks>
 7     Module ModuleTest
 8         ''' <summary>
 9         ''' 模块里面的方法都是静态的,无需实例化,也无从实例化
10         ''' </summary>
11         ''' <remarks></remarks>
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         ''' <summary>
22         ''' 有返回值的方法,用Function来声明
23         ''' </summary>
24         ''' <returns></returns>
25         ''' <remarks></remarks>
26         Public Function Test1() As String
27             Console.WriteLine("这个是Module里面的Test1方法")
28             Return ""
29         End Function
30         ''' <summary>
31         ''' 无返回值的方法,用Sub来声明
32         ''' </summary>
33         ''' <remarks></remarks>
34         Public Sub Test2()
35             Console.WriteLine("这个是Module里面的Test2方法")
36         End Sub
37 
38         ''' <summary>
39         ''' 类型能够放在模块里面,但主要的现实意义在于分类存放而已,放在模块里面并不影响该类型对外的引用。
40         ''' 例如咱们并不必定须要用VBModuleTest.ModuleTest.Class1,
41         ''' 而是直接经过VBModuleTest.Class1就能够对其进行引用
42         ''' </summary>
43         ''' <remarks></remarks>
44         Public Class Class1 : Implements IComparable
45             ''' <summary>
46             ''' 声明属性
47             ''' </summary>
48             ''' <remarks></remarks>
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             ''' <summary>
60             ''' 声明方法
61             ''' </summary>
62             ''' <returns></returns>
63             ''' <remarks></remarks>
64             Public Function GetClassName() As String
65                 Test1()
66                 ModuleTest.Test2()
67                 Return Me.GetType().ToString()
68             End Function
69 
70             ''' <summary>
71             ''' 实现接口中的方法
72             ''' </summary>
73             ''' <param name="obj"></param>
74             ''' <returns></returns>
75             ''' <remarks></remarks>
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

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

相关文章
相关标签/搜索