C#中的委托

一、委托概述

我们知道,方法的参数中可以有各种类型的变量,但是方法本身也可以作为参数传递到其他方法中,这就是委托的一大特点。

委托是存有对某个方法的引用的一种引用类型变量,引用可在运行时被改变。

所有的委托都派生自System.Delegate类。

二、使用委托

1.声明委托
声明了委托才能把委托当作一个变量来操作

public delegate string SampleDelegate(int n);

2.实例化委托
委托类型通过new关键字来实例化,实例化时可以绑定一个方法作为它的一个引用,只写方法名,不用带参数。

SampleDelegate myDelegate = new SampleDelegate(Method);

也可以实例化后再赋值(或者称为绑定)

SampleDelegate myDelegate = new SampleDelegate();
myDelegate = Method;

实例代码:

internal class Program
    {
        // 定义一个委托类型
        public delegate void SampleDelegate (int n);
        private static void Main(string[] args)
        {
            //读取键盘输入的数字
            int num = Convert.ToInt32(Console.ReadLine());
            // 创建委托实例,在创建时就关联上需要被引用的方法MyMethod
            SampleDelegate  myDelegate  = new SampleDelegate(MyMethod);
            //调用另一个方法,并把委托对象作为参数传递进去
            Add(myDelegate,num);
        }
        private static void Add(SampleDelegate sample,int n){
            sample(n);
        }
        private static void MyMethod(int n)
        {
            n += n;
            Console.WriteLine(string.Format("数字是{0}",n));
            Console.ReadKey();
        }
    }

输入12,效果如下:

在这里插入图片描述

三、为什么使用委托

可能你会有疑问,“为什么要通过参数来传递方法?如果要使用其他方法,直接在方法体内调用它不就好了?我从没用过委托,该实现的照样能实现,也没什么问题啊”。

对于这种问题,我的看法从来都是以实用为主,同时遵循规范,并不认为这种做法是完全错误的。但C#作为一门面向对象语言,其三大特点就是封装、继承、多态,做C#开发,就应该尽量编写满足这三大特性的代码,而使用委托就至少体现了其中两种特性:

1.封装:委托可以看成是对方法实现的一层抽象和封装,我们可以把具体的方法实现封装在一个委托类型中,而不暴露方法本身。

2.多态:委托提供了统一的方法签名抽象,我们可以用同一种方式调用不同的方法实现,只要它们的签名与委托类型匹配即可。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值