日期:2014-05-18  浏览次数:20933 次

C# 事件委托有关
委托事件什么的,还是有点问题
如下代码一直都会用,但是具体不知道什么原理

C# code

    btn.Click += new delegate{Close();};



还有,最近看了一篇帖子弄清楚,.net的委托事件的规范(以前搞不懂EventArgs,也没去问),想问一下怎么样查看C#里的比如Window类的源代码之类的。

------解决方案--------------------
事件其实就是一个 多路广播委托(多播委托) 具体可参见MSDN。
想看源码用Reflector吧。
------解决方案--------------------
委托其实可以看成一种数据类型,不过这个数据类型是你自己定义的,
这个数据类型比较特别:它规定了实现它的方法的结构原型,也就是你的事件的类型。
因此:可以说事件是一个特殊的委托类型。
但是事件:可以订阅多次。多次订阅则会调用相应的处理。(可以看看什么是事件轮循)
看代码:
C# code


C# code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

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

            //订阅多次事件
            this.Load += new EventHandler(Form1_Load); //加事件:+1
            this.Load += new EventHandler(Form1_Load1);//加事件:+1
            this.Load += new EventHandler(Form1_Load1);//加事件:+1

            //当事件激发时,C#会轮循事件的订阅。也就是说:我们在往Load事件中加处理方法。
            //参考类似代码:int n=0;n+=1;

            //移除事件
            this.Load -= new EventHandler(Form1_Load1);//-1,减事件。是不是类似我们的:int n=0;n+=1;
        }

        void Form1_Load(object sender, EventArgs e)
        {
            MessageBox.Show("Form1_Load");
        }

        void Form1_Load1(object sender, EventArgs e)
        {
            MessageBox.Show("Form1_Load1");
        }
    }
}