VB.net入门(1):类~构造函数,事件

来源:互联网 发布:建站abc. 电脑 编辑:程序博客网 时间:2024/06/10 09:03
VB.net中的类的构造函数是
[color=#808080]sub New()
end sub[/color]

当然,你也可以加参数。比如Human类的构造函数:
[color=#808080]sub New(Byval Name[/color] as string, byval [color=#000080]Gender[/color] as String, byval [color=#000080]Stature[/color] as integer)
    [color=#000080][b]me[/b][/color].Name = [color=#000080]Name[/color]          'me是VB.net中的关键字,表示对象自己,如同java中
    me.Gender = [color=#000080]Gender[/color]      '的this。java中的super在VB.net中就是MyBase
    me.Stature = [color=#000080]Stature[/color]
end sub

这样,我们的老王就是
[color=#808080]dim LaoWang As new Human("老王"[/color], [color=#000080]"男"[/color], [color=#000080]177[/color])

[color=#000000]这样的话,构造Human对象的时候就必须带参数了。我们可以另加一个不带参数的New过程。这里就略过了。

对象不是死的,是活的。对象应该能够主动向外界做出一些表示。这就是事件。比如一个人生了病。这个时候我们就要把他送到医院去。我们先在Human类当中定义一个事件:
public event[/color] FallIll

我们假设某人暴饮暴食,吃出病了。在Eat过程中写上:
[color=#808080]public sub Eat()
    raiseevent FallIll   [/color][color=#808080]'raiseevent用来引发一个事件[/color]
end sub

外界怎样来接收这个事件呢?用AddHandler。我们要先定义一个过程:
[color=#808080]sub GoToHospital
    Console.WriteLine("病人被送到医院去了。")
end sub[/color]

然后将这个过程绑定到一个具体的对象的事件上:
[color=#808080]AddHandler[/color] LaoWang.FallIll, [color=#000080]AddressOf[/color] GoToHospital

这样,一旦执行LaoWang.Eat,就会引发FallIll事件,这时GoToHospital过程就会执行。完整的代码如下:
[color=#808080]imports System[/color]
[color=#808080]public module MyModule
    sub Main
        dim LaoWang as Human
        LaoWang = new Human("老王", "男", 177)
        AddHandler LaoWang.FallIll, AddressOf GoToHospital
        Console.writeline("{0}, {1}, 身高{2}厘米", _
                            LaoWang.Name, LaoWang.Gender, LaoWang.Stature)
        LaoWang.Eat()      '这里引发事件
        Console.Read
    end sub
   
    sub GoToHospital
        Console.WriteLine("病人被送到医院去了。")
    end sub
end module[/color]
[color=#808080]public class Human
    public Name as String
    public Gender as String
    public Stature as integer
   
    sub New(Byval Name as string, byval Gender as String, byval Stature as integer)
        me.Name = Name
        me.Gender = Gender
        me.Stature = Stature
    end sub
   
    sub New()     '不带参数的构造函数
    end sub
   
    public event FallIll[/color]
[color=#808080]    public sub Eat()
        raiseevent FallIll
    end sub[/color]
[color=#808080] public sub Sleep()
end sub

public sub SeeADoctor()
end sub
   
    public function Born() as Human
        if Gender = "女" then
            return new Human("","",50)
        else
            return nothing
        end if
    end function
end class

事件还可以带参数。比方我们把FallIll的定义改为:
public event FallIll(Byval Name as String[/color])

然后把Eat的内容改为:
[color=#808080]raiseevent FallIll(me.Name[/color])

接着把GoToHospital的定义改为:
[color=#808080]sub GoToHospital(Byval Name as String[/color])
    Console.WriteLine([color=#000080]Name[/color] & "被送到医院去了。")
end sub

这时候运行我们就会看到:“老王被送到医院去了。”