c#,类里面可以添加属性和方法,那可不可以添加事件呢?

c#,类里面可以添加属性和方法,那可不可以添加事件呢?,第1张

先来看看在VB中如何使用类的事件。特别指出,这里的事件不是Windows的消息事件,而是类的自定义事件。

'在类中声明一个事件

Public Event MyEvent()

'触发一个事件

RaiseEvent MyEvent

在创建对象后如何调用这个事件呢?如下:

'声明一个事件类的对象,注意WithEvents关键字

Public WithEvents theClass As MyClass

'创建对象,不能和声明放在一条语句

Set theClass = New MyClass

'调用事件

Private Sub theClass_MyEvent()

            '添加事件处理代码

End Sub 

在VB中提供了类的事件机制,它在对象内部的数据改变时,可以通知用户在外部进行处理,提高了与用户的交互能力。

接下来我们看看在C++中如何实现类似的事件功能。先看类的代码:

class MyClass

{

             typedef void (*pFunc)(void)

public:

             void MyEvent(pFunc pEventFunc)

             {

                 m_pMyEvent=pEventFunc

             }

    

             void Run()

             {

                 try

                 {

                     m_pMyEvent()       

                 }

                 catch(...){}

             }

private:

             pFunc m_pMyEvent // 保存事件函数的指针

}

接着看调用对象的代码,如下:

//事件函数

void EventFunc(void)

{

             cout<<"raise event. "<<endl 

}

int main()

{

             MyClass theClass 

             theClass.MyEvent(EventFunc)

             theClass.Run()

             return 0

}

由上面代码可知,在C++中,其实就是使用回调函数来模拟类似于VB的类的事件机制。首先将一个函数的指针保存的类的私有变量中,当需要触发事件时,则通过先前保存的函数指针来调用函数即可。

举个简单的流程

1.先定义一个委托,不过很多时候不需要,可以直接使用系统的。

public delegate void SampleEventHandler(object sender, SampleEventArgs e)

2.在类中定义事件。

public event SampleEventHandler SampleEvent

要了解深刻一点,你可以查看一下多播委托(Multicast Delegate)

3.执行事件:

private OnSampleEventHandler(object sender, SampleEventArgs e) {

if (SampleEvent != null) {

SampleEvent(sender, e)

}

}

外部:

4.加载事件:

xxx.SampleEvent += this.xxx_OnSampleEventHandler

5.定义事件发生时执行的方法

protected void xxx_OnSampleEventHandler(object sender, SampleEventArgs e) { ... }

在类视图中选择要添加消息相应函数的类,右击->属性,消息选项卡选择要添加的函数。

把输入光标定在一个类的类名上,然后 “Ctrl+Enter”,调出属性面板,在面板上就可以看到有消息映射的按钮了。

切换过去只后,就可以看到所有能自动添加消息映射的消息了。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11750530.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-18
下一篇2023-05-18

发表评论

登录后才能评论

评论列表(0条)

    保存