委託和事件

委託:關鍵字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");
        }
    }
}
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章