模块可以用来分类存放函数、过程和相关变量等,而类当然是用来存放类的代码的,类可以在任何时候用new关键词将其实体化为对象以进行操作。当你仅仅是为了编写一个全局的过程、函数甚至是常量时,就该用module,而要编写类的时候就必需将代码放在class中。 类和模块,类中的方法可以是静态的,也可以是动态实例的。模块中的东西基本上都是静态的,使用时通常不需要生成一个实例来访问,另外定义的PUBLIC变量应该是全程的。
模块可以使用,但是应该尽量少用,例如仅仅使用 sub Main() 来启动程序而已,通常应该写成类。
模块可以认为是受限制的类,它们的所有成员都是共享的,永远不能实例化,不支持继承,不能实现接口。
module: 只能控件内部调用 class:可以做开放接口使用
另外,如果在类中声明 Main 过程,则必须使用 Shared 关键字。在模块中,Main 不必是 Shared。
首先,这是一个历史原因。早先的VB语言都有模块和类模块的概念。所谓模块一般就是存放公用的一些方法(Sub)或者函数(Function),而类模块,相当于就是我们经常所说的类的概念。
模块(Module)里面可以直接有方法,这些方法自动就是静态的(或者称为共享的——VB.NET中的关键字是Shared),这些方法可以直接调用,所以Module是无法实例化,也没有必要实例化的。
模块无法继承,也无法实现接口。
模块里面可以有类,但其实这个类并不需要真的通过模块作为前缀来引用。所以模块有点虚的概念
模块可以被组织到命名空间中去,因为模块其实是个虚的,所以它的方法也可以直接外层的命名空间调用
Private name As String
Public Property _name As String
Get
Return Me.name
End Get
Set(value As String)
Me.name = value
End Set
End Property
Private age As Integer
Public Property _age As Integer
Get
Return Me.age
End Get
Set(value As Integer)
Me.age = value
End Set
End Property
复制代码
添加好文本框控件TextBox后把属性IMEMode的值改成Disable,这样在该文本框中就不能使用中文输入法了。然后对文本框的KeyPress事件添加以下代码
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Textbox1.KeyPress
If Char.IsDigit(e.KeyChar) Or e.KeyChar = Chr(8) Then
e.Handled = False
Else
e.Handled = True
End If
End Sub
复制代码
e.KeyChar是键盘输入的键对应的字符,IsDigit函数可以判断是否为0到9的数字,Chr(8)为退格键,当e.Handled为True时,程序认为该KeyPress事件已经被处理过了,文本框的内容也就不会发生变化了。