位置:首页 > 软件操作教程 > 编程开发 > C# > 问题详情

委托的建立

提问人:刘冬梅发布时间:2020-10-12

1. 建立一个委托类型,并声明该委托可以指向的方法的签名(函数原型)

delegate void MyDelegate(int a,int b);

2.建立一个委托类的实例,并指向要调用的方法

//利用委托类的构造方法指定,这是最为常见的一种方式

MyDelegate md=new MyDelegate(Max);

//利用自动推断方式来指明要调用的方法,该形式更类型于函数指针

MyDelegate md=Max;

3.利用委托类实例调用所指向的方法

int c=md(4,5);

下面通过实例来演示C#中委托的使用。

 案例操作020601:利用委托实现方法的动态调用

首先,添加如下控件:

 两个RadioButton,分别用来让用户选择求最大值以及求最小值

 二个TextBox,用来输入两个操作数

 一个TextBox,用来显示运算结果

 一个Button,用来执行运算

界面如下图所示:

image.png

下一步,在窗口中添加两个方法: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>

}

窗口中的代码,如下图所示:

image.png

下一步:为了使用委托来实现动态指向,我们需要建立一个委托类“MyDelegate”,并建立该委托类型的一个实例,如下图所示:

image.png

上面的代码中,我们可以发现,此时,还没有让MyDelegate类型的实例“md”指向任何一个方法(即:md的值为null),原因是:在编写代码的时候,我们还不知道用户想要调用哪一个方法。

下一步,分别为两个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类型的实例“md”指向Max方法,如果用户选择了求最小值的RadioButton,则让MyDelegate类型的实例“md”指向Min方法。这样作的目的,就是要把选择的过程交给用户。

下一步,我们为界面中的Button编写Click事件,并利用委托来调用求最值的方法。代码如下所示:

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();

}

从上面的代码中,可以发现,在使用委托之前,先要判断其值是否为空,如果不为空,则可以进行调用,同时,使用者可以看到,在调用md时,我们并没有关心md到底指向了哪一个方法,总之,md不为空的时候,就一定会指向MaxMin当中的一个。

为了让求最大值的RadioButton在程序开始运行的时候就被选中,在FormLoad事件中添加如下代码:

private void Form1_Load(object sender, EventArgs e)

{

this.md = new MyDelegate(this.Max );

}

运行的效果如下图所示:

image.png

image.png

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部