VB.NET中Module的概念

本文详细解释了VB.NET中Module的概念及其与C#等语言的区别。Module主要用于存放静态方法,这些方法无需实例化即可调用,并且无法继承或实现接口。此外还介绍了如何将类型放置在Module中以及它们的引用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该篇文章是我于2009年6月10日通过自己编写的工具,批量从位于在博客园的博客站点(http://chenxizhang.cnblogs.com)同步而来。文章中的图片地址仍然是链接到博客园的。特此说明!

陈希章

原文地址:http://www.cnblogs.com/chenxizhang/archive/2008/09/09/1287311.html
原文标题:VB.NET中Module的概念
原文发表:2008/9/9 1:37:00

虽然很久不用VB.NET,但偶尔也会被问到这方面的问题。其中一个典型的问题就是:为什么VB.NET中会有一个Module的东西,而在C#等语言中是没有的

首先,这是一个历史原因。早先的VB语言都有模块和类模块的概念。所谓模块一般就是存放公用的一些方法(Sub)或者函数(Function),而类模块,相当于就是我们经常所说的类的概念。下面这个图是我从Excel的VBA中截取的,VB6里面也是这样类似的设计

image 

其次,VB.NET里面的Module还有一些新的东西。

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

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

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

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

下面有个例子。注意,这里的代码只是演示目的而写的,没有任何具体意义 。

'''可以用命名空间封装,这是比较好的做法
Namespace Xizhang
    ''' 
    ''' 模块无法继承,无法实现接口
    ''' 
    ''' 
   
   
    Module Module1
        ''' 
        ''' 模块里面的方法都是静态的,无需实例化,也无从实例化
        ''' 
        ''' 
   
   
        Sub Main()
            Dim c As New class1
            c.Name = "chenxizhang"
            Console.WriteLine(c.Name)
            Console.WriteLine(c.GetClassName())
            Console.Read()
        End Sub

        ''' 
        ''' 类型可以放在模块里面,但主要的现实意义在于分类存放而已,放在模块里面并不影响该类型对外的引用。
例如我们并不一定需要用Xizhang.Module1.Class1,而是直接通过Xizhang.Class1就可以对其进行引用
        ''' 
        ''' 
   
   
        Public Class class1 : Implements IComparable
            ''' 
            ''' 类型可以继承一个基类,可以实现一个或者多个接口
            ''' 
            ''' 
  
  
            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
作者:陈希章
出处:http://blog.youkuaiyun.com/chen_xizhang
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值