`

委托与事件

    博客分类:
  • C#
阅读更多
提到委托就要想到事件。

关于委托
1)委托是一种类型。但是委托定义了方法的类型。
2)这样,把方法做为参数进行传递成为可能。
形式
delegate void GreetingDelegate(string name);

void EnglishGreeting(string name)
void ChineseGreeting(string name)
签名相同的方法就是委托类型的,以上两种方法便是委托类型的。

传参数时只传方法名。如:直接传EnglishGreeting

委托链(作用是批处理):
委托不同于string的一个特性:可以将多个方法捆绑(委托、注册)到同一个委托对象上,形成委托链,当调用这个委托对象的时候,将依次调用委托链中的方法。

namespace WindowsFormsApplication1
{
    public delegate void Greeting(string name);//定义委托,委托是定义方法的类型
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //定义两个方法,签名(形式)与委托的签名相同。
        private void EnglishGreeting(string name) {
            MessageBox.Show("Hello,"+name);
        }
        private void ChineseGreeting(string name) {
            MessageBox.Show("你好,"+name);
        }
        //使方法成为参数成为可能
        private void MakeGreeting(string name, Greeting greeting) {
            greeting(name);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            MakeGreeting("Kobe", EnglishGreeting);//调用方法
            MakeGreeting("科比", ChineseGreeting);

            Greeting delegate1 = new Greeting(EnglishGreeting);//声明委托对象,就把方法EngishGreeting委托给对象delegate1了,也可以说委托对象delegate1代表方法EngishGreeting,以委托对象就可以采用下种用法了。
            delegate1("Kobe");
            delegate1 = ChineseGreeting;//委托对象的重新赋值
            delegate1("科比");

            //委托链,实现批处理
            delegate1 += EnglishGreeting;
            delegate1 += ChineseGreeting;
            delegate1("中国");
        }
    }
}


事件
关于事件的说法:
1)委托是一种自定义的类型。委托定义了方法的类型。
2)事件是委托的实例。使用委托实例的委托链注册一些方法。使用+=注册,-=撤销
3)当事件发生的时候,调用委托链中的这些方法。不妨称这些方法为事件处理函数。

举例:
热水器发出水开的事件
警报器接受这个事件,做出相应的动作
显示器接受这个事件,做出相应的动作

如果想让报警器和显示器能接受到这个事件,那么方法需要注册这个事件。

using Delegate;//引入命名空间

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //声明三个对象
            Heater heater=new Heater ();
            Alarm alarm=new Alarm ();
            Display display=new Display ();
            
            heater .BoilEvent +=alarm .Alert ;//注册方法
            heater .BoilEvent +=display .ShowMsg ;
            heater .BoilWater ();
        }
    }
}
namespace Delegate
{ 
    //热水器类
    public class Heater 
    {
        private int temperature = 0;
        public delegate void BoilHandler(int param);//委托是方法的类型
        public event BoilHandler BoilEvent;//事件是委托的实例,把方法委托给实例,实例就代表了方法。
        public void BoilWater() {
            for (int i = 0; i <=100 ; i++)
            {
                temperature++;
                if (temperature ==99&&BoilEvent !=null)
                {
                    BoilEvent(temperature);//实例代表了方法,所以可以用这种形式
                }
            }
        }

    }
    //报警器类
    public class Alarm
    {
        public void Alert(int temperature) 
        {
            MessageBox.Show("水开了,温度为"+temperature .ToString ());
        }
    }
    //显示器类
    public class Display
    {
        public void ShowMsg(int temperature) 
        {
            MessageBox.Show("水温现在是:"+temperature .ToString ());
        }
    }


分享到:
评论

相关推荐

    委托与事件调用示例

    总结一下,`委托与事件`是.NET编程中不可或缺的部分,它们允许我们创建回调机制,处理异步操作,并实现解耦的设计。在`PrintDemo1`示例中,我们看到如何定义委托,创建事件,以及如何订阅和触发事件。通过深入学习和...

    委托与事件的简单例子

    在这个“委托与事件的简单例子”中,我们可能会看到以下代码结构: 1. **定义委托**: 首先,我们需要定义一个委托类型,表示我们的事件处理方法签名。例如: ```csharp public delegate void ...

    c#委托与事件实例讲解

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

    C#中委托与事件的区别

    此外,关于委托和事件的中间代码,也就是编译器在编译时生成的与委托和事件相关的IL代码,同样需要深入理解。中间代码涉及到方法指针、调用约定、闭包等概念,它们是理解.NET运行时如何实际执行委托和事件操作的关键...

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

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

    VS2010轻松学习C#-从零到深入-天轰穿.NET4趣味编程视频教程_第25讲:委托与事件实例浅析

    在本节“VS2010轻松学习C# - 从零到深入 - 天轰穿.NET4趣味编程视频教程_第25讲:委托与事件实例浅析”中,我们将深入探讨C#编程中的两个核心概念:委托(Delegates)和事件(Events)。这两个概念在.NET框架中扮演...

    c#委托与事件的关系

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

    C#委托与事件

    在C#编程语言中,委托和事件是两个非常重要的概念,它们构成了事件驱动编程的基础。...在实际项目中,结合文档《C#委托与事件.doc》的详细分析,初学者将更好地掌握这些概念,并能够在实践中得心应手。

    委托与事件程序例子

    委托和事件是C#编程语言中的重要特性,它们在实现对象间的通信和解耦中扮演着关键角色。本文将深入探讨这两个概念,并通过一个具体的示例来解释...通过理解和熟练掌握委托与事件,开发者可以写出更高效、更灵活的代码。

    CH10 委托与事件

    在本章"CH10 委托与事件"中,我们将深入探讨这两种机制,以及如何在C#编程中有效地利用它们。 首先,让我们了解一下**委托**。委托可以被看作是“类型安全”的函数指针,它允许我们存储对方法的引用,并可以在稍后...

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

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

    C#编写的委托与事件的十个精典的例子(可以直接运行)

    委托类型必须与指定的方法签名匹配。例如,我们可以定义一个处理数字相加的委托,然后将两个加法方法绑定到这个委托,以便在适当的时候调用它们。 2. **事件定义**:事件是类的一种特殊类型的委托,用于在对象之间...

    cweituo.rar_委托与事件_委托开发

    本文将深入探讨委托与事件的基本概念,以及如何在实际开发中运用它们。 **一、委托(Delegates)** 1. **定义**:委托在.NET中是一种类型,它封装了对方法的引用。换句话说,委托可以看作是函数指针的高级版本,...

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

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

    C#委托与事件的详解

    【C#委托与事件详解】 委托是C#中一种强大的特性,它允许我们将方法作为参数传递,这在处理事件和回调机制中尤为重要。在.NET Framework中,委托是类的实例,它封装了一个或多个方法,使得我们可以像操作对象一样...

Global site tag (gtag.js) - Google Analytics