1。类,首先介绍共享程序,共享成员就是在所有类和所定义派生类的实例之间共享的方法、属性、字段和事件。所有使用类创建的对象都可以访问相同的数据、共享实现过程,并且收到相同的激发事件。在Public或Private成员修饰符后加上Shared关键字即可了。Shared关键字指示一个或多个被声明的编程元素将被共享。共享元素不关联于某类或结构的特定实例。可以通过使用类名或结构名称或者类或结构的特定实例的变量名称限定共享元素来访问它们。
a.在类中写入这样的共享成员定义
Public Class ShareClassMember
Public Shared SharedValue As String
Public Shared Sub ShareMethod()
MsgBox("共享方法.")
End Sub
End ClassSub
2。2 form2窗体
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
End Sub
Sub Main()
3。采用窗体实例的方法也能实现上述功能,代码如下
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
If frm2 Is Nothing Or frm2.IsDisposed Then ‘判断对象是否被销毁
frm2 = New Form2()
End If
Me.Hide()
frm2.Show()
End Sub
3。2form2窗体
Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
If frm2 Is Nothing Or frm2.IsDisposed Then ‘判断对象是否被销毁
frm1 = New Form1()
End If
Me.Hide()
frm1.Show()
End Sub
3。3mainmodule启动窗体
Module Module1
Public frm1 As New Form1() 'Form1的公用变量实例
Public frm2 As New Form2() 'Form2的公用变量实例
Sub Main()
Application.Run(frm1) '这句话表明程序启动了modele后,会接下来运行frm1,即form1的一个实例。主线程就成为运行期的frm1了。
End Sub
感谢herry的文章,我受益匪浅,上面的算法也是我学习后的演示程序。
4、结构
4.1结构可以构造函数,但多是带参数的函数,在结构类型声明中不可能声明无参数实例构造函数。结构也可以实例化为成对象。只能声明‘参数化’实例构造函数。结构是值类型,而类是引用类型。因此,结构使用堆栈分配,
''''''******************定义结构s1
Structure S1
Public x, y As Integer '结构变量声明不能指定初始值、New 关键字或数组初始大小
Public Sub New(ByVal x As Integer, ByVal y As Integer)
Me.x = x
Me.y = y
End Sub
End S1
Sub main()
'每个结构都隐式地具有 Public 无参数实例构造函数,所以构造函数不带参数的情况也是允许的
Dim H1 As SHenry = New S1()
Dim H2 As SHenry = New S1(3, 1)
End Sub
4.2 类使用堆分配,类:能对非静态成员初始化,是存储在运行时的堆上,只能通过引用该存储来访问它们,不能直接访问。引用类型的变量总是包含该类型的值引用,或包含空引用。引用类型的变量赋值只会创建引用的一个副本,而不是所引用的值的副本。它们实际上都是会指向同一块存储区的
Class C1
Public z As Integer = 0
‘能对非静态成员初始化也是一个区别
End Class
'**********************通过程序学习两种的区别************
'**************结构定义
Structure S1
Public x, y As Integer ''''结构变量声明不能指定初始值、 New 关键字或数组初始大小
Public Sub New(ByVal x As Integer, ByVal y As Integer)
Me.x = x
Me.y = y
End Sub
End S1
'''''''''''''**************类定义
Class C1
'能对非静态成员初始化也是一个区别
Public z As Integer = 0 ''类变量声明可以指定初始值
End Class
Sub main()
Dim H1 As S1 = New S1(0, 5) '赋给H1.x=0
Dim H2 As S1 = H1
H2.x = 26
Dim R1 As New C1() 'R1.z也是等于R1.z=0
Dim R2 As C1 = R1 '''此时R2.z=0
R2.z = 26
''类引用变量R2的值发生改变,因为是引用类型,此时R1的值也发生改变,R1和R2的 它们实际上都是会指向同一块存储区的引用空间 ,所以两者只要有一个发生改变,它们的值都将同时改变,此时R1.z=26,R2.z=26
Console.WriteLine("H1.x= " & H1.x & ",H2.x= " & H2.x)
Console.WriteLine("R1.z= " & R1.z & ",R2.value= " & R2.z)
End Sub
结果:H1.x=0;H2.x=26
R1.z=26,R2.z=26
结构是直接存储在堆栈上。当包含结构实例的存储位置被销毁时,结构实例也会被销毁。值类型总是可以直接访问。结构类型的变量总是包含此类型的值。与引用类型(类结构引用的变量)不同,值类型的值不能为空引用,值类型的变量(由结构引用的变量)赋值会创建所赋的值的副本,当然会新开辟一块内存区来保存值。”
所以H1和H2的值分别放在不同的存储空间,两者互不干扰。
a。结构是不可继承的,而类可以继承
b。引用类型的变量赋值只会创建引用的一个副本(所引用的存储区),而不是所引用的值的副本,它们实际上都是会指向同一块存储区的
值类型的变量赋值会创建所赋的值的副本,当然会新开辟一块内存区来保存值。
c。结构成员都默认为 Public,类变量和常量默认为 Private,其他的类成员默认为 Public
d。结构成员不能声明为 Protected,类成员可以
e。结构过程不能处理事件,类过程可以
f。结构从不终止,从不在任何结构上调用 Finalize 方法;类可由垃圾回收器终止,垃圾回收器会跟踪未完成的引用直到某个特定的实例,当检测到没有剩下的活动引用时,垃圾回收器将在类上调用 Finalize
总结;类是vb。net基本编程结构,窗体也是一个类,学好类,类的继承。