委託:關鍵字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);
委託可以有參數和返回值,如果有參數或者返回值的話必須和爲委託分配的方法一致。
使用如下:
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");
}
}
}
其實委託和事件的結合在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");
}
}
}