多播委托 简介 每一个委托都是继承自MulticastDelegate,也就是每个都是多播委托。 带返回值的多播委托只返回最后一个方法的值 多播委托可以用加减号来操作方法的增加或者减少。 给委
          多播委托
简介
- 每一个委托都是继承自MulticastDelegate,也就是每个都是多播委托。
- 带返回值的多播委托只返回最后一个方法的值
- 多播委托可以用加减号来操作方法的增加或者减少。
- 给委托传递相同方法时 生成的委托实例也是相同的(也就是同一个委托)
代码实现
 	//声明委托
    delegate void MulticastTest();
    public class MulticastDelegateTest
    {
        
            
        public void Show()
        {
            MulticastTest multicastTest = new MulticastTest(MethodTest);
            multicastTest();
            Action action =new Action(MethodTest);
            action = (Action)MulticastDelegate.Combine(action, new Action(MethodTest2));
            action = (Action)MulticastDelegate.Combine(action, new Action(MethodTest3));
            action = (Action)MulticastDelegate.Remove(action, new Action(MethodTest3));
            action();
            //等同于上面
            action = MethodTest;
            action += MethodTest2;
            action += MethodTest3;
            action -= MethodTest3;
            foreach (Action action1 in action.GetInvocationList())
            {
                action1();
            }
            Console.WriteLine("==========");
            action();
                        
            Func<string> func = () => { return "我是Lambda"; };
            func += () => { return "我是func1"; };
            func += () => { return "我是func2"; };
            func += GetTest;
            func += GetTest; //给委托传递相同方法时 生成的委托实例也是相同的(也就是同一个委托)
            
            string result = func();
            Console.WriteLine(result);
            Console.WriteLine("==========");
        }
        #region 委托方法
        public void MethodTest()
        {
            Console.WriteLine("我是方法MethodTest()1");
        }
        public void MethodTest2()
        {
            Console.WriteLine("我是方法MethodTest()2");
        }
        public void MethodTest3()
        {
            Console.WriteLine("我是方法MethodTest()3");
        }
        public string GetTest()
        {
            return "我是方法GetTest()";
        }
        #endregion
    }
泛型委托
代码实现
    //泛型委托声明
    delegate void GenericDelegate<T>(T t);
    public class GenericDelegate
    {
        public static void InvokeDelegate()
        {
            GenericDelegate<string> genericDelegate = new GenericDelegate<string>(Method1);
            genericDelegate("我是泛型委托1");
            //官方版本(不带返回值)
            Action<string> action = new Action<string>(Method1);
            action("我是泛型委托1");
            //Action<string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string>
            GenericDelegate<int> genericDelegate1 = new GenericDelegate<int>(Method2);
            genericDelegate1(2);
            //官方版本(带回值)
            Func<string, string> func = new Func<string, string>(Method3);
            string ret = func("我是带返回值Func委托");
            Console.WriteLine( ret );
            //Func<string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string,string>
        }
        #region 委托方法
        public static void Method1(string str)
        {
            Console.WriteLine(str);
        }
        public static void Method2(int num)
        {
            Console.WriteLine("我是泛型委托2 "+num);
        }
        public static string Method3(string str )
        {
            return str;
        }
        #endregion
    }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。
