VB.NET中Module的概念

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

VB.NET中Module的概念

图-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

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

你可能感兴趣的:(VB.NET)