VBA 类模块系列之六——类对象的初始化

上篇谈到类对象在初始化的时候,某些属性要是能够自动初始化就好了,会省去你一些麻烦。这就是本篇要谈的,类对象的初 … 继续阅读“VBA 类模块系列之六——类对象的初始化”

上篇谈到类对象在初始化的时候,某些属性要是能够自动初始化就好了,会省去你一些麻烦。这就是本篇要谈的,类对象的初始化。

我们知道类的接口包含了属性,方法和事件。这里的事件是指我们在类中定义的事件。类除了我们外加给它的自定义事件以外,它与生俱来的就有2个事件:实例化事件(Class_Initialize)销毁事件(Class_Terminate)。现在只谈实例化事件。

实例化事件,或者叫初始化事件,顾名思义,是在类实例化的时候自动触发。类什么时候被实例化呢?就在执行set objPerson = New Person这条语句的时候。如果你在初始化事件中写入一些代码,这些代码就会自动执行。类的初始化事件是我们初始化类属性的最佳场合。

我们在Person类代码模块中,代码窗格左上方的对象下拉框里面选择Class,右上方的事件下拉框中选择Initialize,类的实例化事件的响应子程序就自动创建好了。

Class_Initalize()这个事件响应子程序,与大家比较熟悉的Form_Load()事件响应子程序没有什么不同。只要这个事件发生了,那么就会自动执行其中的代码。现在我们就可以把场合(Situation)这个属性的初始化放在Class_Initalize()中了。

Option Compare Database
Option Explicit

Public Name As String
Public Gender As String
Public Situation As String

Public Sub Speak()
    Select Case Situation
        Case "一般"
            MsgBox Left(Name, 1) & "小姐"
        Case "正式"
            MsgBox Left(Name, 1) & "女士"
        Case "撩"
            MsgBox "小姐姐"
        Case Else
            MsgBox Name
    End Select
End Sub

Private Sub Class_Initialize()
    Situation = "一般"
End Sub

既然场合(Situation)属性已经被初始化了,标准模块中就不用再初始化该属性了。

Option Compare Database
Option Explicit

Sub test()
    Dim objPerson As Person
    Set objPerson = New Person
    
    objPerson.Name = "赵冰冰"
    objPerson.Gender = "女"
    objPerson.Speak
End Sub

我们重新执行一遍Test()子程序,会得到同样的结果。

我们知道,一个人生下来是男是女,这辈子都不会变了,当然你说可以到泰国去变性,好吧,你说得对,但一般大多数人是不会这么干的。我们来看看我们的类,你会发现,性别初始化以后,我们很容易的就能将它修改了。我们在Test()子程序中,可以随意的添加一行代码:objPerson.Gender = “男”,这个人就变性了。

在类中,我们有没有办法阻止类的使用者做这样操作呢?答案当然是肯定的^_^下一篇将给大家介绍一种更加健壮的定义属性的方法。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注