委托:关键字delegate定义
委托可以有参数和返回值,如果有参数或者返回值的话必须和为委托分配的方法一致。
使用如下:
delegate bool Comp(int i,int j);//定义委托
public bool Method(int i, int j)//定义和委托一致的方法
{
   return i > j;
}
 Program pro=new Program();
 Comp cm = new Comp(pro.Method);//为委托分配方法
 bool b= cm(19, 12);
 
事件:关键字event定义
其实委托和事件的结合在C#中应用十分广泛。例如,在winform中,当我们打击一个按钮时,就会触发一个click事件,而这个事件会通知委托。
例如一个输出HelloWorld的程序,
private void button1_Click(object sender, EventArgs e)
 {
     MessageBox.Show("HelloWorld!");
 }
其实这里用到的就是委托和事件button1_Click就是符合EventHandler委托的一个方法,同时我们在Form1.Designer.cs中看到如下代码:
this.button1.Click += new System.EventHandler(this.button1_Click);
前面一个this.button1.Click是事件的名字,后面一个this.button1.Click是订阅的和委托相对应的方法。
下面看一个在控制台下的例子:
delegate void Comp(int i,int j);
class Program
{
    event Comp abc;//定义事件
    public void Method()
    {
       abc(10,5);//在此时执行事件,调用MethodTwo方法
    }
    static void Main(string[] args)
    {
        Program pro=new Program();
        pro.abc += pro.MethodTwo;//订阅方法
        pro.Method();
    }
    public void MethodTwo(int i,int j)
    {
        if (i > j)
        {
            Console.WriteLine("比较结果为i>j");
        }
        else
        {
            Console.WriteLine("比较结果为i<=j");
        }
    }
}