C# 委托

释放双眼,带上耳机,听听看~!

一、什么是委托?

初次理解这么抽象的概念确实有点挺难的,如果学过C语言,可能知道C语言里可以把一个方法当做参数来传递,委托大概类似也是这样一个原理。 想象一下,在一个类里面定义一个变量n,这个变量的类型是一个特殊的类型——委托,然后在其它地方通过参数传递,对这个变量n进行了赋值,并且这个“委托”类型变量n是可以当做方法来使用的,就像这样:


1
2
3
1   n();
2
3

注意:委托是一个引用类型,是一个类。那么定义委托就要定义和类一个级别。什么意思呢!就是类里面可以有其它的类型作为该类的属性,比如定义了一个类A,类A里面定义了int a,bool b,类c 作为三个属性,它们之间是可以“嵌套”使用的。delegate关键字和Class关键字是一个级别的,但委托有比较特殊,像是一个可以有返回值的类,是类却可以当做方法来使用。所以在定义的时候不仅要有delegate关键字,也要有返回类型。

二、下面来看如何使用委托:

1、定义

它和类是同级别的,可以有参数


1
2
3
4
5
6
7
1   //定义一个类
2   public Class A{}
3
4   //定义一个委托
5   public delegate void MyDel();
6
7

2、赋值

需要对委托进行实例化,就像一个类一样,并且实例化的时候就要给它传递一个方法,不用带括号、带参数,它会自己识别


1
2
3
1   MyDel myDel=new MyDel(方法名);
2
3

3、调用


1
2
3
1   myDel();
2
3

三、下面举个例子来在实战中使用委托:

我们实现,Form2窗体里的按钮调用Form1窗体里的按钮。
1、新建一个类,将默认的类删掉(或注释),定义委托


1
2
3
4
5
1    //class Class1 { }
2    public delegate void MyDel(object sender, EventArgs e);
3    //解释一下委托里面的参数,委托是一个安全类型,这个里面的参数是从 button点击事件的参数一致,因为这个委托要调用点击事件
4
5

2、在Form2窗体中


1
2
3
4
5
6
7
8
9
1    //定义一个委托,作为Form2的一个属性
2    public MyDel myDel;
3    private void button1_Click(object sender, EventArgs e)
4    {
5        //调用委托
6        myDel(sender,e);
7    }
8
9

3、在Form1窗体中


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1    private void button1_Click(object sender, EventArgs e)
2    {
3        //实例化一个委托,并“挂”上一个button2的点击方法
4        MyDel myDel = new MyDel(button2_Click);
5
6        //实例化Form2,
7        Form2 f2 = new Form2();
8        //给Form2里的委托赋值
9        f2.myDel = myDel;
10        f2.ShowDialog();
11    }
12
13    private void button2_Click(object sender, EventArgs e)
14    {
15        label1.Text = "button2被点击了!!!";
16    }
17
18

效果展示:
C# 委托

委托还是很好学的,委托也可以“挂”多个方法,这些方法会被依次调用。比如:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1    public delegate void MyShow();
2    public void f1()
3    {
4        MessageBox.Show("我是f1方法");
5    }
6    public void f2()
7    {
8        MessageBox.Show("我是f2方法");
9    }
10    
11    private void button1_Click(object sender, EventArgs e)
12    {
13        MyShow myShow = new MyShow(f1);
14        myShow += f2;
15        myShow();
16    }
17
18

C# 委托

“一学编程深如海” 哈哈哈,大家一起学习还是挺有意思的。知道“委托”这个词很久了,“忍”了很久都没敢学,今天给思莲解决跨窗体调用方法时,我觉得有必要学习一下了,跟说思莲我也不会委托,怎么办,那就现学一下吧!

给TA打赏
共{{data.count}}人
人已打赏
安全技术

用node.js从零开始去写一个简单的爬虫

2021-12-21 16:36:11

安全技术

从零搭建自己的SpringBoot后台框架(二十三)

2022-1-12 12:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索