zoukankan      html  css  js  c++  java
  • VB.NET中Module的概念

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

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

    image 

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

    模块(Module)里面可以直接有方法,这些方法自动就是静态的(或者称为共享的——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
    
  • 相关阅读:
    程序员面试金典-面试题 08.12. 八皇后
    程序员面试金典-面试题 08.11. 硬币
    程序员面试金典-面试题 08.10. 颜色填充
    程序员面试金典-面试题 08.09. 括号
    程序员面试金典-面试题 08.08. 有重复字符串的排列组合
    程序员面试金典-面试题 08.07. 无重复字符串的排列组合
    程序员面试金典-面试题 08.06. 汉诺塔问题
    python学习笔记-27 使用@property
    python学习笔记-25 实例属性和类属性
    python学习笔记-26 使用__slots__
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/1287311.html
Copyright © 2011-2022 走看看