今天学习VB.NET,发现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 ''' <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
这里的代码只是纯粹为演示目的而写的,没有任何具体意义 。
点关注,不迷路
文章每周持续更新,可以微信搜索「 十分钟学编程 」第一时间阅读和催更,如果这个文章写得还不错,觉得有点东西的话 ~求点赞👍 求关注❤️ 求分享❤️
各位的支持和认可,就是我创作的最大动力,我们下篇文章见!