委托

委托: 关键字 Delegate

  用法中无返回值委托是Action<>

  有返回值是Func

委托从根本上来说就是一个类,继承值System  MulticastDelegate 该类是一个密封类,是不可以被继承

 

 

使用案例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DelegateDemo1
{
    /// <summary>
    /// 枚举类型
    /// </summary>
    public enum people
    {
        Chinese = 1,
        USA = 2,
    }

    class Program
    {
        static void Main(string[] args)
        {
            People();
        }



        public static void People()
        {
            /*第一种方法通过switch来条件判断*/
            Program.Sayspeak2("张三", people.Chinese);
            Program.Sayspeak2("MISSLi", people.USA);


            /*第二方法在通过不同的选择来调用不通的方法*/
            Program.SayChinese("张三");
            Program.SayUSA("MISSLi");





            /*
             在每一个方法上面增加一个方法量说明
              
                方法一中可以直接在判断中增加说明
                方法二中需要在每一个方法中增加需求条件
             */
            /*第三种方法 */

            //至上往下--逻辑解耦,方便维护升级
            //至下而上--代码重用,去掉重复代码


            Program.Sayhellow("MISSLi", SayChinese);
            Program.Sayhellow("MISSLi", SayUSA);

        }



        public static void Sayhellow(string name, Action<string> action)
        {
            //需求中增加
            //Console.WriteLine("AABBABC 大闹天宫无底渊");
            action.Invoke(name);

        }

        /// <summary>
        /// 方案二
        /// </summary>
        /// <param name="name"></param>
        /// <param name="people"></param>
        public static void Sayspeak2(string name, people people)
        {
            //需求中增加
            //Console.WriteLine("AABBABC 大闹天宫无底渊");
            switch (people)
            {
                case people.Chinese:
                    Console.WriteLine($"{name}说 你好");
                    break;
                case people.USA:
                    Console.WriteLine($"{name}Say hellow");
                    break;
                default:
                    throw new Exception("这是一个错误的方法");
            }
        }



        private static void SayChinese(string name)
        {
            //需求中增加
            //Console.WriteLine("AABBABC 大闹天宫无底渊");
            Console.WriteLine($"{name}说 你好");
        }

        private static void SayUSA(string name)
        {
            //需求中增加
            //Console.WriteLine("AABBABC 大闹天宫无底渊");
            Console.WriteLine($"{name}Say hellow");
        }



        public void CWNoprop()
        {

            Console.WriteLine("这是一个无返回值的方法");

        }

        public int CWreturnint()
        {
            Console.WriteLine("这是一个带返回值的方法返回值为2");
            return 2;
        }

    }
}

  

 

posted @ 2021-01-02 19:23  YZM_Leo  阅读(88)  评论(0)    收藏  举报