zoukankan      html  css  js  c++  java
  • c#委托的声明、实例化和调用

      // 1 委托的声明、实例化和调用
      // 2 委托的意义:解耦   
    
    class Program
        {
            static void Main(string[] args)
            {
                MyDelegateEvent delegateEvent = new MyDelegateEvent();
                delegateEvent.Show();
    
                Student student = new Student();
                student.SayHi();
    
                Console.ReadKey();
            }
        }
    
        // 1.委托本质就是个类
        // 2.继承自System.MulticastDelegate 特殊类-不能被继承
        class MyDelegateEvent
        {
            //1. 委托声明
            public delegate void NoReturnNopara();
            public delegate void NoReturnWithPara(int x, int y);
            public delegate MyDelegateEvent WithReturnWithPara(out int x, ref int y);
            public void Show()
            {
                //2.委托的实例化 要求传递一个参数类型 返回值类型跟委托一致
                NoReturnNopara method = new NoReturnNopara(this.DoNothing);
                //WithReturnWithPara withPara = new WithReturnWithPara(this.ParaReturn);
                //int y = 3;
                //withPara.Invoke(out int x,ref y);
                //3.委托实例的调用
                method.Invoke();
                method();//也可以省略掉.Invoke()
                IAsyncResult asyncResult = method.BeginInvoke(null, null); //启动一个线程完成计算
                //method.EndInvoke(asyncResult);//等待异步调用结束
            }
            public void DoNothing()
            {
                Console.WriteLine("this is DoNothing");
            }
    
            private MyDelegateEvent ParaReturn(out int x, ref int y)
            {
                throw new Exception();
            }
        }
     
        class Student
        {
    
      public delegate void SayHiDelegate(string name);
            //自上往下 逻辑解耦 ,方便升级维护
            //自下往上 代码重用,去掉重复代码
            public void SayHi()
            {
                SayHiPerfact("王大师", this.China);
    
                SayHiPerfact("Tom Hiddleston", this.Britain);
    
                SayHiPerfact("蒼井そら", Japan);
            }
    
            /// <summary>
            /// 相同的东西用一个方法实现,不同的各自去写,然后通过委托组合
            /// </summary>
            /// <param name="name"></param>
            /// <param name="method"></param>
            public void SayHiPerfact(string name, SayHiDelegate method)
            {
                Console.WriteLine("我是通用方法");//这里可以写通用方法 比如写日志,加异常处理
                method.Invoke(name);              //执行不同逻辑
            }
    
            public void China(string name)
            {
                Console.WriteLine($"{name},早上好");
            }
            public void Britain(string name)
            {
                Console.WriteLine($"{name},Good morning");
            }
            public void Japan(string name)
            {
                Console.WriteLine($"{name},おはよう");
            }
        }
    
     
  • 相关阅读:
    httpcontext in asp.net unit test
    initialize or clean up your unittest within .net unit test
    Load a script file in sencha, supports both asynchronous and synchronous approaches
    classes system in sencha touch
    ASP.NET MVC got 405 error on HTTP DELETE request
    how to run demo city bars using sencha architect
    sencha touch mvc
    sencha touch json store
    sencha touch jsonp
    51Nod 1344:走格子(贪心)
  • 原文地址:https://www.cnblogs.com/wangdash/p/11737973.html
Copyright © 2011-2022 走看看