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

    今天学习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

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

  • 相关阅读:
    后台查询出来的list结果 在后台查询字典表切换 某些字段的内容
    easyui字典js 切换 jsp页面显示的内容
    easyui获取table列表中所有数据组装成json格式发送到后台
    java日常工作错误总结
    easyui模板页面 不良调查
    配置简单的拦截器java中
    读取pdf中的内容
    springMVC生成pdf文件
    C++之友元函数和友元类
    ROS初级教程 cmake cmakelist.txt 的编写教程
  • 原文地址:https://www.cnblogs.com/xdp-gacl/p/3495853.html
Copyright © 2011-2022 走看看