面向对象——委托

举报
AI浩 发表于 2021/12/23 01:38:44 2021/12/23
【摘要】 概念:类似方法在内存中的首地址,但是它是类型安全的,明确知道方法的返回值类型和参数。可以这样理解:对方法的一个间接调用。定义了委托相当于定义了一个类。 格式:访问修饰符 关键字(delegate)  所指向方法的返回类型 委托的名字([形参]); 使用方式:委托的名字 委托对象 =  关键字(new ) 委托的名...

概念:类似方法在内存中的首地址,但是它是类型安全的,明确知道方法的返回值类型和参数。可以这样理解:对方法的一个间接调用。定义了委托相当于定义了一个类。

格式:访问修饰符 关键字(delegate)  所指向方法的返回类型 委托的名字([形参]);

使用方式:委托的名字 委托对象 =  关键字(new ) 委托的名字(所指向方法的名字);

     委托对象([实参]);

委托的分类:单播委托,多播委托

单播委托:所指向方法的返回类型是具体的数据类型(如:int,short等);

多播委托:所指向方法的返回类型不是具体的数据类型,而是空(void);

例:

public delegate void CallPoliceHander();//定义委托,用来指向事件发生时调用的方法。

    public class Car

    {

        public event CallPoliceHander OnCrach;//通过委托定义事件。

        public void Cracsh()

        {

            if (OnCrach != null)//事件发生了,如果不为空则表明事件发生了

            {

                OnCrach();//调用委托所引用的方法

            }

        }

    }

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        private void button1_Click(object sender, EventArgs e)

        {

            Car car = new Car();//创建对象

            car.OnCrach += new CallPoliceHander(car_OnCrach);

            car.Cracsh();

        }

        void car_OnCrach()

        {

            MessageBox.Show("已经通知警察了!");

        }

}

一个委托可以调用多个方法:

  public delegate void Print();//声明一个委托

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        private void button1_Click(object sender, EventArgs e)

        {

            Print p = new Print(PrintA);

            p += PrintC;

            p += PrintB;

            p();//调用委托所引用的方法。

        }

        private void PrintA()

        {

            MessageBox.Show("PrintA");

        }

        private void PrintB()

        {

            MessageBox.Show("PrintB");

        }

        private void PrintC()

        {

            MessageBox.Show("PrintC");

        }

    }

文章来源: wanghao.blog.csdn.net,作者:AI浩,版权归原作者所有,如需转载,请联系作者。

原文链接:wanghao.blog.csdn.net/article/details/105505175

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。