委托

一个类class1写的

public delegate int MyDelegate(int a, int b);  声明一个委托类型并命名为MyDelegate,认为它是一个“指针”,它能够指向符合某种规则的所有的方法,返回值为int ,并且参数是两个int类型

public delegate string MyDelegate1(string a, string b);  返回值为string,并且参数是两个string类型

public class Class1
{

  /// <summary>
  /// 某个框架逻辑-->2020年编写的
  /// </summary
  public void MyAddFrameWork(MyDelegate myDelegate)
  {
      Console.WriteLine("2020年,高级程序员实现了框架的核心功能1,计算出了2个int类型的 数值 假设为 5和6");

      //【扩展】能够实现调用者自己的自定义业务逻辑-->?怎么搞?作为这个高级程序员,能预判千万调用者的思维?-->使用委托,让调用者把它的业务逻辑当做参数“传进来”
      //本框架 规定:需要调用者传递一个返回值为 int,并且参数为 2个int 类型的 方法进来。

      int a = myDelegate(5, 6);//回调:调用者自定义的逻辑的方法,计算5和6

      //【2】 实现框架的核心功能2
      Console.WriteLine($"2020年,高级程序员再根据调用者计算的值:{a} 实现了框架的核心功能2");

    }
  }
}

一个Program展示的

static void Main(string[] args)
{

  原始写法,为了新手方便理解
  MyDelegate myDelegate = new MyDelegate(Add); //创建一个MyDelegate,并绑定(指向)Add方法。
  class1.MyAddFrameWork(myDelegate);

 

  匿名方法(函数)写法-->没有名字的方法,一次性使用的时候,可以这么写,简便

  MyDelegate myDelegate1 = delegate (int a, int b)
  {
    Console.WriteLine($"2021年,初级程序员的自定义业务逻辑计算 a和b 的值为{a + b}");
    return a + b;
  };
  class1.MyAddFrameWork(myDelegate1);

 

   lamda表达式写法,也属于匿名函数 =>读 “goto”理解为:去执行
   MyDelegate myDelegate2 = (int a, int b) =>
   {
    Console.WriteLine($"2021年,初级程序员的自定义业务逻辑计算 a和b 的值为{a + b}");
    return a + b;
  };

   class1.MyAddFrameWork(myDelegate2);

 

  终极写法,直接传递lamda
  class1.MyAddFrameWork((int a, int b) =>
  {
     Console.WriteLine($"2021年,初级程序员的自定义业务逻辑计算 a和b 的值为{a + b}");
     return a + b;
  });

 

#region 多播委托->可以指向多个符合规范的方法

MyDelegate myDelegate3 = new MyDelegate(Add);
myDelegate3 += Add1;
myDelegate3 += Add1;
myDelegate3 += Add1;

class1.MyAddFrameWork(myDelegate3);

#endregion

}

public static int Add(int a,int b)
{
  Console.WriteLine($"2021年,初级程序员的自定义业务逻辑计算 a和b 的值为{a + b}");
  return a + b;
}


public static int Add1(int a1, int b1)
{
  Console.WriteLine($"2021年,初级程序员的自定义业务逻辑计算 a1和b1 的值为{a1 + b1}");
  return a1 + b1;
}

posted @ 2021-06-18 15:11  污蝇哥  阅读(38)  评论(0)    收藏  举报