C#代表(delegate)和事件(event)

代表(delegate):

它是C#语言里面的函数指针,代表可以指向某一个函数,在运行的时候调用这个函数的实现。下面来看看它的实现步骤:

  1. 声明一个delegate对象。
  2. 实现和delegate具有相同参数和返回值的函数实现(可以是静态和非静态的)。
  3. 产生一个delegate对象的时候,把你刚刚实现的函数作为参数传给他的构造函数。

请看下面例子:源码下载

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DelegateDemo
{
    public delegate void MyDelegate(string mydelegate); //声明一个delegate对象

    public class TestClass
    {
        //实现有相同参数和返回值的函数
        public void HelloDelegate(string mydelegate)
        {
            Console.WriteLine(mydelegate);
        }

        //实现有相同参数和返回值的静态函数
        public static void HelloStaticDelegate(string mystaticdelegate)
        {
            Console.WriteLine(mystaticdelegate);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            TestClass testClass = new TestClass();
            MyDelegate mydelegate = new MyDelegate(testClass.HelloDelegate); //产生delegate对象
            mydelegate("Hello delegate");
            MyDelegate myStaticDelegate = new MyDelegate(TestClass.HelloStaticDelegate);
            myStaticDelegate("Hello static delegate");
            Console.ReadKey();
        }
    }
}

 

事件(event):

让我通过一个例子来模拟事件的整个过程:

  1. 创建一个MyButton类,它里面有一个Click 事件。
  2. 创建一个MyForm类,他里面有一个我们上面定义的MyButton类。
  3. 要求当我们用户单击MyButton类的时候MyForm类要对他进行处理,输出一条信息“我知道你被单击了”

请看下面例子:源码下载

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DelegateAndEventDemo
{
    public delegate void ClickEventHandler(object sender, EventArgs e); //声明一个代理

    public class MyButton
    {
        public event ClickEventHandler ClickEvent; //声明一个事件

        public void Click()
        {
            if (ClickEvent != null)
            {
                Console.WriteLine("MyButton:我被单击了");
                ClickEvent(this, null);
            }
        }
    }

    public class MyForm
    {
        public MyButton myButton = new MyButton();

        public MyForm()
        {
            myButton.ClickEvent += new ClickEventHandler(OnClickEvent);

        }

        void OnClickEvent(object sender, EventArgs e)
        {
            Console.WriteLine("MyForm:我知道你被单击了");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            MyForm form = new MyForm();
            form.myButton.Click();
            Console.ReadKey();
        }
    }
}

 

Note:public delegate void ClickEventHandler(object sender, EventArgs e);这是事件委托标准的声明方法,其实在参数里面我们可以不传,也可以是其他类型的。但是最好还是使用上面的声明方法,你可以继承EventArgs,来包装你要传送的其他任何参数。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值