学习类

1。类,首先介绍共享程序,共享成员就是在所有类和所定义派生类的实例之间共享的方法、属性、字段和事件。所有使用类创建的对象都可以访问相同的数据、共享实现过程,并且收到相同的激发事件。在Public或Private成员修饰符后加上Shared关键字即可了。Shared关键字指示一个或多个被声明的编程元素将被共享。共享元素不关联于某类或结构的特定实例。可以通过使用类名或结构名称或者类或结构的特定实例的变量名称限定共享元素来访问它们。

a.在类中写入这样的共享成员定义

Public Class ShareClassMember 

   Public Shared SharedValue As String  

   Public Shared Sub ShareMethod()     

      MsgBox("共享方法.")   

   End Sub

End ClassSub   

b.在窗体的BoxShared方法中引用共享成员
BoxShared()  
   Dim Shared1 As New ShareClass()   ' 创建了类的一个实例 .  
   Dim Shared2 As New ShareClass()   ' 创建了类的第二个实例 .  
   Shared1.SharedValue = "Share Value 1"    ' 给共享字段赋值
   Shared2.SharedValue = "Share Value 2"   ' 重新写共享字段的值  ,这时sharevalue1的值就不存在了 
   ShareClassMemeber.ShareMethod()       ' 不用创建实例就可以调用类的方法 .
End Sub
2.共享成员和窗体实例均能完成窗体间的引用,下面的代码给出了两种方法的实现方式。创建form1和form2两个窗体,form1中有按钮控件button1,form2中有按钮控件button2,点击button1,form2显示,form1隐藏;同理form2隐藏。
共享成员方法:
2。1form1窗体
Private Shared m_vb6FormDefInstance As Form1
    Public Shared Property DefInstance() As Form1
        Get
            If m_vb6FormDefInstance Is Nothing OrElse m_vb6FormDefInstance.IsDisposed Then             '判断窗体实例是否存在
                m_vb6FormDefInstance = New Form1
            End If
            DefInstance = m_vb6FormDefInstance
        End Get
        Set(ByVal Value As Form1)
            m_vb6FormDefInstance = Value
        End Set
    End Property
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Me.Hide()
        Form2.DefInstance.Show()
    End Sub
2。2  form2窗体
   Private Shared m_vb6FormDefInstance As Form2
    Public Shared Property DefInstance() As Form2
        Get
            If m_vb6FormDefInstance Is Nothing OrElse m_vb6FormDefInstance.IsDisposed Then             '判断窗体实例是否存在
                m_vb6FormDefInstance = New Form2        '如果不存在就构造一个新的窗体实例
            End If
            DefInstance = m_vb6FormDefInstance          '如果存在就对其进行调用
        End Get
        Set(ByVal Value As Form2)
            m_vb6FormDefInstance = Value
        End Set
    End Property
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Me.Hide()
        Form1.DefInstance.Show()      '  Form1.DefInstance为创建form1的实例,Form1.DefInstance.Show就是让form1窗口show

    End Sub
    Private Sub Form2_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
        Form1.DefInstance.Show()
    End Sub
2。3启动模块Module

    Sub Main()
        Application.Run(Form1.DefInstance)    '启动的是主线程的Form1窗体,也可以用创建form1的实例来实现
    End Sub
3。采用窗体实例的方法也能实现上述功能,代码如下
3,1form1窗体

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基本编程结构,窗体也是一个类,学好类,类的继承。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值