代表(delegate):
它是C#語(yǔ)言里面的函數(shù)指針,代表可以指向某一個(gè)函數(shù),在運(yùn)行的時(shí)候調(diào)用這個(gè)函數(shù)的實(shí)現(xiàn)。下面來(lái)看看它的實(shí)現(xiàn)步驟:
請(qǐng)看下面例子:
using System;
using System.Collections.Generic;
using System.Text;
namespace UsingDelegate
{
public delegate void MyDelegate(string mydelegate);//聲明一個(gè)delegate對(duì)象
public class TestClass
{
//實(shí)現(xiàn)有相同參數(shù)和返回值的函數(shù)
public void HelloDelegate(string mydelegate)
{
Console.WriteLine(mydelegate);
}
//實(shí)現(xiàn)有相同參數(shù)和返回值的靜態(tài)函數(shù)
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);//產(chǎn)生delegate對(duì)象
mydelegate("Hello delegate");//調(diào)用
MyDelegate myStaticDelegate = new MyDelegate(TestClass.HelloStaticDelegate);//產(chǎn)生delegate對(duì)象
myStaticDelegate("Hello static delegate");//調(diào)用
}
}
}
事件(event):
讓我通過(guò)一個(gè)例子來(lái)模擬事件的整個(gè)過(guò)程:
請(qǐng)看下圖:
首先我們會(huì)單擊button,然后button會(huì)通知Form,然后From就作出相應(yīng)。這個(gè)過(guò)程在C#里面應(yīng)該怎么做到呢?
下面我會(huì)列出上述例子的源代碼(這里就不介紹怎么聲明event等等內(nèi)容了):
using System;
using System.Collections.Generic;
using System.Text;
namespace UsingEvent
{
public delegate void ClickEventHandler(object sender, EventArgs e);//聲明一個(gè)代表:請(qǐng)看文章最后面Note
public class MyButton //創(chuàng)建MyBottom
{
public event ClickEventHandler ClickEvent;//聲明一個(gè)事件
public void Click() //單擊MyButton
{
if (ClickEvent != null)
{
Console.WriteLine("MyButton: 我被單擊了");
ClickEvent(this, null); //拋出事件,給所有相應(yīng)者
}
}
}
public class MyForm
{
public MyButton myButton = new MyButton();
public MyForm()
{
//添加事件到myButton中,當(dāng)myButton被單擊的時(shí)候就會(huì)調(diào)用相應(yīng)的處理函數(shù)
myButton.ClickEvent += new ClickEventHandler(OnClickEvent);
}
//事件處理函數(shù)
void OnClickEvent(object sender, EventArgs e)
{
Console.WriteLine("MyForm: 我知道你被單擊了!");
}
}
class Program
{
static void Main(string[] args)
{
MyForm form = new MyForm();//生成一個(gè)MyForm
form.myButton.Click();//單擊MyForm中的鼠標(biāo),效果就出來(lái)了
}
}
}
Note:public delegate void ClickEventHandler(object sender, EventArgs e);這是事件委托標(biāo)準(zhǔn)的聲明方法,其實(shí)在參數(shù)里面我們可以不傳,也可以是其他類型的。但是最好還是使用上面的聲明方法,你可以繼承EventArgs,來(lái)包裝你要傳送的其他任何參數(shù)。
聯(lián)系客服