`
isiqi
  • 浏览: 16485208 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

C#委托与事件

阅读更多

学习参考资料:
MSDN:ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconprovidingeventfunctionality.htm

CodeProject: http://www.codeproject.com/csharp/events.asp


几天来参照MSDN上的委托事件的例子,自已写了一个关于委托的事件。例子很简单,但也能说明关于委托与事件是个什么东西吧。

委托,功能就相当于C/C++中的函数指针。可以用定义的委托来调用所指向的函数。

先声明一个简单的委托:

//声明委托:
publicdelegatevoidDeFunction(inta,intb);

//函数声明:
publicvoidSwap(inta,intb)
{
//.
}


//建立一个委托引用,以指向相应的函数。
DeFunctiondefun;
defun
=newDefunction(Swap);


//使用委托来代替函数的调用
defun(3,4);//实际上是调用的Swap(3,4)


OK,究竟委托在.net中发挥了什么用处?答案是:可以用于事件。

事件,就是在程序中发生某些情况,需要被相应的函数来处理,比如按纽被按下(Button click)就是一事件,调用到某个函数来处理这个情况。关键的关键是:Button是一个类,它的所有函数都已被封装好,已经不可能再在类中添加相应的函数来处理这个Button被按下究竟该怎么处理。难道像下面这样吗?

classButton
{
..
publicButton_Click(objectsender,EventArgse)
{
//处理Button被按下的代码,需要在这里更改Button被按下的代码
}


publicclick()
{
//告诉这个Button类什么情况下是被按下的,然后调用Button_Click来处理之
//比如,当鼠标在这个Button下按这个按纽时,当Button有交点并按Enter时。都表示鼠标被按下。
Button_Click();
}

}

这样多不实用,多不现实啊。所以,只能想另外的办法...比如可以让Button_Click变成虚拟函数,然后。添加Button时继承这此Button,然后改写这个函数。但也有一个问题,就是我想让处理按纽被按下时的函数是自定义的,比如MyButton_Click,这样子就没有办法了。

如果用委托来做会是什么样的情况?

首先,要定义一个委托。
public delegate void MyEventHandle(object sender,EventArgs e);
注意,在事件中用委托一般命名为EventHandle.

然后,在Button类中可以这样表示:

publicclassButton
{
publicMyEventHandlebuttonclick;//委托类型

publicvirtualvoidOnClick(EventArgse)
{
if(buttonclick!=null)
buttonclick(
this,e);//注意,在定义button类的时候,还不知道这个委托会挂到哪个函数上面去,但是肯定会挂到某个函数上面去。
}


publicvoidclick()
{
EventArgse
=newEventArgs();//这里是事件参数类型,是一个类,可以派生此类,做个自定义的参数集。
OnClick(e);
}

}


这样的类定义好了,那么我们用它的时候就简单多了。不需要往里改写任何里面的东西,只要添加我们想要的函数就好了。

在我们的(客户端)上。
1.写Button被按下时处理的函数,函数随便怎么命名都可以。
publicclassDoButton
{
publicvoidMyButton_Click(objectsender,EventArgse)
{
//这里写上我们要写的处理内容即可,sender就是Button的对象实体。
//.
}

}


2.挂钩,把上面的函数与Button类中的委托挂起来
Buttonbt=newButton();
DoButtondobutton
=newDoButton();

bt.buttonclick
+=newMyEventHandle(dobutton.MyButton_Click);//已与Button中的委托挂钩了

//下面,如果发生click事件,就可以调用我们写的MyButton_Click函数了。
bt.click();
分享到:
评论

相关推荐

    【原创】C#委托与事件的传递与封装案例 c#经典案例.pdf

    C#委托与事件的传递与封装案例 C#委托是指一种引用类型,可以封装任意返回类型和参数列表的方法。委托可以作为方法的参数传递,也可以作为事件的处理函数。下面是关于C#委托的详细知识点: 1. 声明委托:使用...

    C# 委托与事件

    在C#编程语言中,委托和事件是两个关键的概念,它们是实现面向对象设计模式,尤其是事件驱动编程的基础。本文将深入探讨这两个概念,并通过一个简单的示例来帮助理解。 首先,我们来看“委托”。在C#中,委托是一种...

    c#委托与事件的关系

    ### C#中的委托与事件关系解析 #### 一、引言 在面向对象编程语言C#中,委托(Delegate)和事件(Event)是两个重要的概念。本文将深入探讨这两者之间的关系及其在实际开发中的应用。 #### 二、委托(Delegate) ...

    C# 委托与事件的概念及理解

    C# 委托与事件的概念及理解 委托是 C# 中一个非常重要的概念,它可以看作是一个函数指针,能够引用对象方法,通过传递地址的机制完成。委托是一个类,当你对它实例化时,要提供一个对象方法,将其作为它构造函数的...

    c#委托与事件实例讲解

    本文将深入探讨C#中的委托与事件,并通过实例来帮助理解它们的工作原理和使用场景。 首先,我们来了解什么是委托。在C#中,委托是一种类型安全的指针,它可以指向一个方法。换句话说,委托可以被视为能够存储方法的...

    C#中委托与事件的区别

    委托(Delegate)和事件(Event)是C#中非常重要的两种机制,它们在.NET框架中扮演着极其重要的角色。理解这两种概念,对于深入学习C#编程语言,构建高效、可维护的程序架构至关重要。首先我们来探讨一下委托的概念...

    c#委托与事件

    标题和描述概述的知识点主要集中在C#中的委托与事件,这是.NET Framework中极其重要的概念,尤其对于初学者理解和掌握面向对象编程以及事件驱动编程模式至关重要。以下是对这些知识点的详细阐述: ### C#中的委托 ...

    C#委托与事件.rar

    在.NET框架中,C#语言提供了强大的特性来处理方法的调用,这就是委托和事件。这两者都是基于面向对象设计模式的重要组成部分,特别是...通过阅读"C#委托与事件.pdf"文档,可以更深入地学习这两个主题的细节和最佳实践。

    举例说明C#委托与事件

    ### 举例说明C#委托与事件 #### 一、引言 在.NET Framework中,委托与事件是非常重要的概念。对于初学者来说,理解和掌握这两者可能会遇到一定的挑战。本文将通过具体的例子,深入浅出地讲解C#中的委托与事件。 ##...

    c#委托与事件Demo(极易理解!!)

    ### C#委托与事件的理解与应用 在C#编程中,**委托(Delegate)**与**事件(Event)**是两个非常重要的概念,它们在处理异步操作、解耦对象间通信等方面扮演着核心角色。下面,我们将通过一个具体示例来深入探讨这...

    C# 委托与事件,实例代码,调试通过.

    在C#编程语言中,委托和事件是两个关键的概念,它们是实现面向对象设计模式,尤其是事件驱动编程的基础。本文将深入探讨这两个概念,并通过实际的代码示例...希望这些实例代码能帮助你更好地掌握和应用C#的委托与事件。

    C#委托与事件(张子阳).pdf

    ### C#中的委托与事件详解 #### 一、引言 在.NET Framework中,委托与事件是非常重要的概念,尤其对于那些需要实现回调机制的应用场景来说更是如此。虽然这些概念对于初学者来说可能有些抽象和难以理解,但一旦...

    C# 委托事件简单的使用例子

    这是C# 委托与事件简单的使用例子。 只是为了初学者更好的接受委托与事件使用方法而已。 程序有两个窗体,一个是主窗体,一个是副窗体。 打开主窗体,在主窗体中点按钮后,打开副窗体,在副窗体中,可以调整主窗体...

    C#委托与事件PPT

    `EventHandler<TEventArgs>`是一个预定义的泛型委托,它接受一个`object`参数(通常是事件源)和一个`TEventArgs`参数,其中`TEventArgs`是一个派生自`EventArgs`的类,用于传递与事件相关的数据。例如,`Click`事件...

Global site tag (gtag.js) - Google Analytics