C#中的委托

        笔者愚钝,又不很勤捞,但是总有想要成为大神的心。做项目,需要用c#语言,可之前学的是c++,无奈之下只能自学c#。从图书馆借了几本书,但都是实践教程,基础部分过得很快。看到委托的时候,有点懵逼。又翻阅大神们写的关于委托的例子,才勉强明白委托的含义。
        书上没有给出委托的定义,但都不约而同的提到了:为了弥补去掉指针对语言灵活性带来的影响,c#引入了新的类型——委托。
我脑子不好使,还是不懂,于是就看各种书各种资料,找到代码比对,有了浅显的了解。说白了,委托就是一种对对象的调用。其特点是只要参数一致,无论对象长的高矮胖瘦,都可以调用。

        委托的一般声明是这样的:

     [public] delegate void [name](参数);
        老生常谈,当我想用编程实现和不同国家的人打招呼,我需要转换语言。但是用(switch—case)或者(if—else)未免形式上有些不美观,而且没意思。但是有了委托,我们利用委托就可以做到转换语言。代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DelegareANDEvent
{
    class SayHello
    {
        public string Hello_to_English()
        {
            return "Hello,sir!";
        }
        public string Hello_to_Chinese()
        {
            return "先生您好!";
        }
    }

    class Program
    {
        public delegate string Hello();   //委托的声明,可以放在类外
        static void Main(string[] args)
        {
            SayHello hello = new SayHello();   //创建对象(实例化对象)
            Hello H;          //创建委托对象
            H = new Hello(hello.Hello_to_Chinese);//让委托的对象指向一个方法
            Console.WriteLine(H());
            H = new Hello(hello.Hello_to_English);
            Console.WriteLine(H());
            Console.ReadLine();
        }
    }
}
      看到这里我就继续翻书,看其他书。现在将清华大学出版社出版的《c#实践教程》(第二版)关于委托的代码附上:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
 
    class Program
    {
        
        static void Main(string[] args)
        {
            Show(USA);
            Show(China);
            Console.ReadLine();
        }
        private static void China()
        {
            Console.WriteLine("这里是中国!");       
        }
        private static void USA()
        {
            Console.WriteLine("This is America!");
        }
        private static void  Show(Country country)
        {
            country();
        }
        public delegate void Country();
    }
}
       这个代码看得我恶心极了,虽然不长,但是不明白为什么不能正着写,读者看的时候可以从下往上看。这里的委托对象country()是一个无参类型无返回值的,和上面China与USA一样,因此主函数调用的时候,Show()直接调用里面的参数作为对象。

         这本书给了一个警告:委托返回值大多定义为void,因为一个委托变量可以工多个方法来绑定(这就是方法绑定的内容),如果定义了返回值,那么多个有返回值的方法都会向调用语句返回数值,结果就是和面的返回值将前面的覆盖掉,因此委托只能获得最后一个方法调用的返回值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值