委托的建立
1. 建立一個委托類型,并聲明該委托可以指向的方法的簽名(函數(shù)原型)
delegate void MyDelegate(int a,int b);
2.建立一個委托類的實(shí)例,并指向要調(diào)用的方法
//利用委托類的構(gòu)造方法指定,這是最為常見的一種方式
MyDelegate md=new MyDelegate(Max);
//利用自動推斷方式來指明要調(diào)用的方法,該形式更類型于函數(shù)指針
MyDelegate md=Max;
3.利用委托類實(shí)例調(diào)用所指向的方法
int c=md(4,5);
下面通過實(shí)例來演示C#中委托的使用。
案例操作020601:利用委托實(shí)現(xiàn)方法的動態(tài)調(diào)用
首先,添加如下控件:
? 兩個RadioButton,分別用來讓用戶選擇求最大值以及求最小值
? 二個TextBox,用來輸入兩個操作數(shù)
? 一個TextBox,用來顯示運(yùn)算結(jié)果
? 一個Button,用來執(zhí)行運(yùn)算
界面如下圖所示:
下一步,在窗口中添加兩個方法:Max,Min,這兩方法的代碼如下:
int Max(int x,int y)
{
return x>y?x:y;
}
int Min(int x,int y)
{
return x<Y?X:Y;< font>
}
窗口中的代碼,如下圖所示:
下一步:為了使用委托來實(shí)現(xiàn)動態(tài)指向,我們需要建立一個委托類“MyDelegate”,并建立該委托類型的一個實(shí)例,如下圖所示:
上面的代碼中,我們可以發(fā)現(xiàn),此時,還沒有讓MyDelegate類型的實(shí)例“md”指向任何一個方法(即:md的值為null),原因是:在編寫代碼的時候,我們還不知道用戶想要調(diào)用哪一個方法。
下一步,分別為兩個RadioButton編寫它們的“CheckedChanged”事件,代碼如下:
private void rbtMax_CheckedChanged(object sender, EventArgs e)
{
if (this.rbtMax .Checked ==true)
{
this.md = new MyDelegate(this.Max );
}
}
private void rbtMin_CheckedChanged(object sender, EventArgs e)
{
if (this.rbtMin .Checked ==true)
{
this.md = new MyDelegate(this.Min );
}
}
這段代碼是,如果用戶選擇了求最大值的RadioButton,則讓MyDelegate類型的實(shí)例“md”指向Max方法,如果用戶選擇了求最小值的RadioButton,則讓MyDelegate類型的實(shí)例“md”指向Min方法。這樣作的目的,就是要把選擇的過程交給用戶。
下一步,我們?yōu)榻缑嬷械?/span>Button編寫Click事件,并利用委托來調(diào)用求最值的方法。代碼如下所示:
private void btGetResult_Click(object sender, EventArgs e)
{
if (this.md ==null )
{
MessageBox.Show("委托md沒有指向任何方法!");
return;
}
int a = int.Parse(this.tbxOP1 .Text );
int b = int.Parse(this.tbxOP2 .Text );
int c = this.md(a,b);
this.tbxResult.Text = c.ToString();
}
從上面的代碼中,可以發(fā)現(xiàn),在使用委托之前,先要判斷其值是否為空,如果不為空,則可以進(jìn)行調(diào)用,同時,使用者可以看到,在調(diào)用md時,我們并沒有關(guān)心md到底指向了哪一個方法,總之,md不為空的時候,就一定會指向Max和Min當(dāng)中的一個。
為了讓求最大值的RadioButton在程序開始運(yùn)行的時候就被選中,在Form的Load事件中添加如下代碼:
private void Form1_Load(object sender, EventArgs e)
{
this.md = new MyDelegate(this.Max );
}
運(yùn)行的效果如下圖所示:
點(diǎn)擊加載更多評論>>