您现在的位置是:首页 >技术杂谈 >关于C#中委托的思考与实例网站首页技术杂谈

关于C#中委托的思考与实例

ht_game 2023-07-09 16:00:03
简介关于C#中委托的思考与实例

委托的定义:委托是持有一个或多个方法的对象。

delegate void MyDel(int value);//声明委托类型
MyDel del;//声明委托变量

委托的实质:委托的实质其实也是类,同样继承System.Object,这也是委托无论在类内还是类外都能被定义的原因。

委托的作用:委托是一种类型安全的函数回调机制,它不仅能够调用实例方法,也能调用静态方法,并且具备执行多个方法的能力。

委托的本质:委托的本质就是将可执行的代码从一个方法传递到另一个方法;从程序的角度上来看,你可以把委托看成是用来执行方法的一个“指针”。

委托存在的意义:一般情况下你不会想要“执行”一个对象,但委托会执行它所“持有”的方法。
1、使用委托可以增强可扩展性。
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用 If-Else(Switch)语句,同时使得程序具有更好的可扩展性。

不使用委托的情况

  class Program
    {
    //委托的意义之一:使程序具有更好的可扩展性
    //将方法当做参数一样使用,避免了对方法的判断,极大强化的程序的可扩展性
        static void Main(string[] args)
        {
            GreetPeople("jakecheng", Language.English);
            GreetPeople("成龙", Language.Chinese);
            Console.ReadLine();
        }


        public enum Language { 
            English,Chinese
        
        }

        public static void GreetPeople(string name,Language lang)
        {
            switch (lang)
            {
                case Language.English:
                    GreetEnglishPeople(name);
                    break;

                case Language.Chinese:
                    GreetChinesePeople(name);
                    break;     
            }

        }
        public static void GreetChinesePeople(string name)
        {
            Console.WriteLine("早上好,"+name);
        }
        public static void GreetEnglishPeople(string name)
        {
            Console.WriteLine("Morning," + name);
        }

    }

使用委托的情况

  delegate void GreetingDelegate(string name);
    class Program
    {
        static void Main(string[] args)
        {
            GreetPeople("Jake cheng", new GreetingDelegate(GreetEnglishPeople));//MyDelegate(GreetEnglishPeople)

            GreetPeople("成龙", GreetChinesePeople);
            Console.ReadLine();
        }

        public static void GreetPeople(string name, GreetingDelegate MyDelegate)
        {
            MyDelegate(name);

        }

        public static void GreetChinesePeople(string name)
        {
            Console.WriteLine("早上好," + name);
        }
        public static void GreetEnglishPeople(string name)
        {
            Console.WriteLine("Morning," + name);
        }
    }

在使用委托的情况下,代码的冗余明显下降。
委托的使用流程
1、声明一个委托类型。委托声明看上去和方法声明相似,只是没有实现块

2、使用该委托类型声明一个委托变量

3、创建一个委托类型的对象,并把它赋值给委托变量。新的委托对象包含指向某个方法的一用,这个方法的签名和返回类型必须跟第一步中定义的委托类型一致。

4、你可以选择为委托对象添加其他方法

5、在代码中你可以像调用方法一样调用委托

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。