VB.NET的应用为开发人员带来了很大的帮助。大家可以通过这款编程语言实现许多特定的功能需求。而且其中还有很多特定的功能特点供我们使用。虽然很久不用VB.NET,但偶尔也会被问到这方面的问题。其中一个典型的问题就是:为什么VB.NET模块这样一个东西在C#等语言中是没有的。#t#
首先,这是一个历史原因。早先的VB语言都有模块和类模块的概念。所谓模块一般就是存放公用的一些方法(Sub)或者函数(Function),而类模块,相当于就是我们经常所说的类的概念。下面这个图是我从Excel的VBA中截取的,VB6里面也是这样类似的设计
其次,VB.NET模块还有一些新的东西。
VB.NET模块里面可以直接有方法,这些方法自动就是静态的(或者称为共享的——VB.NET中的关键字是Shared),这些方法可以直接调用,所以Module是无法实例化,也没有必要实例化的
模块无法继承,也无法实现接口
模块里面可以有类,但其实这个类并不需要真的通过模块作为前缀来引用。所以模块有点虚的概念
模块可以被组织到命名空间中去,因为模块其实是个虚的,所以它的方法也可以直接外层的命名空间调用。
下面有个例子。注意,这里的代码只是演示目的而写的,没有任何具体意义 。
- '''可以用命名空间封装,这是比较好的做法
- Namespace Xizhang
- ''' < summary>
- ''' 模块无法继承,无法实现接口
- ''' < /summary>
- ''' < remarks>< /remarks>
- Module Module1
- ''' < summary>
- ''' 模块里面的方法都是静态的,
无需实例化,也无从实例化- ''' < /summary>
- ''' < remarks>< /remarks>
- Sub Main()
- Dim c As New class1
- c.Name = "chenxizhang"
- Console.WriteLine(c.Name)
- Console.WriteLine(c.GetClassName())
- Console.Read()
- End Sub
- ''' < summary>
- ''' 类型可以放在模块里面,但主要的现实意义在于
分类存放而已,放在模块里面并不影响该类型对外的引用。
例如我们并不一定需要用Xizhang.Module1.Class1,
而是直接通过Xizhang.Class1就可以对其进行引用- ''' < /summary>
- ''' < remarks>< /remarks>
- Public Class class1 : Implements IComparable
- ''' < summary>
- ''' 类型可以继承一个基类,可以实现一个或者多个接口
- ''' < /summary>
- ''' < remarks>< /remarks>
- Private _name As String
- Public Property Name() As String
- Get
- Return _name
- End Get
- Set(ByVal value As String)
- _name = value
- End Set
- End Property
- Public Function GetClassName() As String
- Return Me.GetType().ToString()
- End Function
- Public Function CompareTo(ByVal obj As
Object) As Integer Implements System.
IComparable.CompareTo- Return 1
- End Function
- End Class
- End Module
- End Namespace
VB.NET模块的相关概念就为大家介绍到这里啦。