Module
Module1
Public aNew As String ' 全局公共成员变量,可以在当前项目的任何类和模块中引用
' Dim aNew As String '模块的成员变量(字段)绝对不会出现形如:Public Dim aNew As String 的声明
Sub Main()
Console.WriteLine( " hello, word! " )
aMethod()
Console.WriteLine(addTwoNumber( 1 , 9 ))
textInputBoxAndMsgBox()
Dim TestWu As New SubNewClass()
Console.WriteLine(TestWu.testSubNew)
Dim TestYou As New SubNewClass( " 调用有参数构造器 " )
Console.WriteLine(TestYou.testCanShuSubNew)
Console.ReadKey()
End Sub
' Protected Sub aMethod() '错误
' Shared Sub aMethod() '错误
Private Sub aMethod()
Console.WriteLine( " aMethod " )
End Sub
Sub New () ' 构造函数
aNew = " 用构造函数初始化aNew成员变量(字段) "
Console.WriteLine(aNew)
End Sub
' Private Function addTwoNumber(ByVal a, ByVal b) As Integer '如果在模块的开始加上了Option Strict On ,则会产生错误,错误提示为: Option Strict On 要求所有变量声明都有“As”子句,如果在模块的开始加上了Option Strict Off或者什么都不加, 则可以通过。
Public Function addTwoNumber( ByVal a As Integer , ByVal b As Integer ) As Integer ' 和过程一样,同样不能用Protected和Private修饰函数
' Return a + b '与下面等价
addTwoNumber = a + b ' 与上面等价,这个是VB6返回值的语法,直接让函数名等于返回值
End Function
Sub textInputBoxAndMsgBox() ' 测试InputBox和MsgBox函数
Dim userName As String
userName = InputBox ( " 请输入一个名字: " , " 测试InputBox和MsgBox " )
MsgBox (userName, , " 测试InputBox和MsgBox " )
End Sub
End Module
Class SubNewClass
Private _testSubNew As String = " 调用默认构造函数(即无参数构造函数) " ' 为配合属性定义的
Public testCanShuSubNew As String ' 一个公共字段,可以在该类外面被访问
Sub New () ' 无参数构造器
End Sub
Sub New ( ByVal X As String ) ' 有参数构造器
Me .testCanShuSubNew = X
End Sub
Public Property testSubNew() As String ' 定义一个属性
Get
Return _testSubNew
End Get
Set ( ByVal value As String )
_testSubNew = value
End Set
End Property
End Class
' VB中的过程包裹子过程(Sub)和函数过程(Function),其实完全可以把过程称为方法或者函数
' 过程和函数都可以接受参数
' 过程(又称子过程)不能有返回值
' 函数(又称函数过程)可以有返回值,而且返回值加在函数声明的后面,用As实现
' VB中的类默认提供一个无参数构造器,所以你不必在代码里显示定义一个无参数构造器就可以用无参数构造器实例化该类。但一旦在类中定义了一个有参数构造器,你就必须显示定义一个
' 无参数构造器,才能用无参数构造器实例化该类
' 模块可以有构造函数,该构造函数在Main函数中会最先被执行
' 模块不能实例化 模块不可继承 模块被隐式的共享(内部成员都是Shared类型,相当与C#中的static)
' 模块的成员不用提供Module名称就可以被访问。既你可以直接用成员的名字访问该成员
' 模块的成员是全局共享的,你可以在程序的任意位置访问这些成员
' 带有Mani()方法的模块可被编译成EXE文件,而不需要提供任何额外的信息指定应用程序的入口点
' 模块可以有Main()函数也可以没有Main()函数
' 通过模块的全局成员变量,我们可以实现B/S结构里面的Session,来判断用户的登陆状态,这个我已经在一个项目实现
' 后记:因为以前有过VB6的开发经验,我觉得VB.NET中的模块是为了最大限度的兼容VB6而保留的,不过就模块式编程来说,我还是比较喜欢,C#中没有模块的实现,而VB.NET满足了的体验
Public aNew As String ' 全局公共成员变量,可以在当前项目的任何类和模块中引用
' Dim aNew As String '模块的成员变量(字段)绝对不会出现形如:Public Dim aNew As String 的声明
Sub Main()
Console.WriteLine( " hello, word! " )
aMethod()
Console.WriteLine(addTwoNumber( 1 , 9 ))
textInputBoxAndMsgBox()
Dim TestWu As New SubNewClass()
Console.WriteLine(TestWu.testSubNew)
Dim TestYou As New SubNewClass( " 调用有参数构造器 " )
Console.WriteLine(TestYou.testCanShuSubNew)
Console.ReadKey()
End Sub
' Protected Sub aMethod() '错误
' Shared Sub aMethod() '错误
Private Sub aMethod()
Console.WriteLine( " aMethod " )
End Sub
Sub New () ' 构造函数
aNew = " 用构造函数初始化aNew成员变量(字段) "
Console.WriteLine(aNew)
End Sub
' Private Function addTwoNumber(ByVal a, ByVal b) As Integer '如果在模块的开始加上了Option Strict On ,则会产生错误,错误提示为: Option Strict On 要求所有变量声明都有“As”子句,如果在模块的开始加上了Option Strict Off或者什么都不加, 则可以通过。
Public Function addTwoNumber( ByVal a As Integer , ByVal b As Integer ) As Integer ' 和过程一样,同样不能用Protected和Private修饰函数
' Return a + b '与下面等价
addTwoNumber = a + b ' 与上面等价,这个是VB6返回值的语法,直接让函数名等于返回值
End Function
Sub textInputBoxAndMsgBox() ' 测试InputBox和MsgBox函数
Dim userName As String
userName = InputBox ( " 请输入一个名字: " , " 测试InputBox和MsgBox " )
MsgBox (userName, , " 测试InputBox和MsgBox " )
End Sub
End Module
Class SubNewClass
Private _testSubNew As String = " 调用默认构造函数(即无参数构造函数) " ' 为配合属性定义的
Public testCanShuSubNew As String ' 一个公共字段,可以在该类外面被访问
Sub New () ' 无参数构造器
End Sub
Sub New ( ByVal X As String ) ' 有参数构造器
Me .testCanShuSubNew = X
End Sub
Public Property testSubNew() As String ' 定义一个属性
Get
Return _testSubNew
End Get
Set ( ByVal value As String )
_testSubNew = value
End Set
End Property
End Class
' VB中的过程包裹子过程(Sub)和函数过程(Function),其实完全可以把过程称为方法或者函数
' 过程和函数都可以接受参数
' 过程(又称子过程)不能有返回值
' 函数(又称函数过程)可以有返回值,而且返回值加在函数声明的后面,用As实现
' VB中的类默认提供一个无参数构造器,所以你不必在代码里显示定义一个无参数构造器就可以用无参数构造器实例化该类。但一旦在类中定义了一个有参数构造器,你就必须显示定义一个
' 无参数构造器,才能用无参数构造器实例化该类
' 模块可以有构造函数,该构造函数在Main函数中会最先被执行
' 模块不能实例化 模块不可继承 模块被隐式的共享(内部成员都是Shared类型,相当与C#中的static)
' 模块的成员不用提供Module名称就可以被访问。既你可以直接用成员的名字访问该成员
' 模块的成员是全局共享的,你可以在程序的任意位置访问这些成员
' 带有Mani()方法的模块可被编译成EXE文件,而不需要提供任何额外的信息指定应用程序的入口点
' 模块可以有Main()函数也可以没有Main()函数
' 通过模块的全局成员变量,我们可以实现B/S结构里面的Session,来判断用户的登陆状态,这个我已经在一个项目实现
' 后记:因为以前有过VB6的开发经验,我觉得VB.NET中的模块是为了最大限度的兼容VB6而保留的,不过就模块式编程来说,我还是比较喜欢,C#中没有模块的实现,而VB.NET满足了的体验