zoukankan      html  css  js  c++  java
  • C#:委托

    Delegate使用三步骤:

    1. 声明:   

    public delegate void ShowDelegate1();  //无参无返回值
    public delegate int ShowDelegate2(int a, int b);  //有参有返回值
    public delegate T ShowDelegate<T>(T t);  //泛型

    2. 赋值:

    ShowDelegate1 myDelegate1 = Fun1;
    //可以重新赋值,但必须是匹配的类型
    myDelegate1 = Test;
    //对于有参的情况,注意赋值只赋函数名,调用时才传参
    ShowDelegate2 myDelegate2 = Fun2;
    ShowDelegate<string> myDelegate3 = Fun3;
    ShowDelegate<float> myDelegate4 = Fun4;

    3. 调用:

    myDelegate1();
    int sum = myDelegate2(1,2);
    myDelegate3("HelloWorld!");
    myDelegate4(1.5f);
     1     private void Fun1()
     2     {
     3         Debug.Log("Fun()");
     4     }
     5  
     6     void Test()
     7     {
     8         Debug.Log("Test");
     9     }
    10 
    11     private int Fun2(int a,int b)
    12     {
    13         Debug.Log("int Fun2(int a,int b)");
    14         return a + b;
    15     }
    16 
    17     private string Fun3(string s)
    18     {
    19         Debug.Log(s);
    20         return s;
    21     }
    22 
    23     private float Fun4(float f)
    24     {
    25         Debug.Log(f);
    26         return f;
    27     }
    • 委托是引用类型,调用之前要赋值,否则为NULL。

    .Net内置委托:特点:不用显示的声明,可以直接赋值 (因为在System里已经声明过了)

    1. Action:

      使用范围:0-16个参数,无返回值的委托。

    2. Func:

      使用范围:0-16个参数,必须有返回值的委托。
     1 //注意最后一个参数代表返回值类型,如果只有一个参数表示无参有1个该类返回值。
     2 Func<int,int,bool> f1 = Fun5;
     3 private bool Fun5(int a,int b)
     4 {
     5      if (a > b)
     6         return true;
     7     else
     8         return false;
     9 } 

    匿名方法:

      定义:没有名字的方法。 
      使用范围:函数回调、和委托结合。
    1 Action ac1 = delegate ()
    2 {
    3     Debug.Log("匿名方法");
    4 };  //注意匿名方法后有分号
    5 ac1();

    Event事件:

      使用范围:只能用+=、-=添加和撤销事件,且只能在声明自己的类里赋值和调用。       
     1 public class MyClass
     2 {
     3     public event Action action;
     4     public void Function()
     5     {
     6         action += delegate ()
     7         {
     8             Debug.Log("event");
     9         };
    10         action();
    11     }
    12 }

    多播委托:

      定义:一个委托中注册多个方法,可以用+、-运算符添加或撤销方法。
     1 Action ac1 = delegate ()
     2 {
     3     Debug.Log("匿名方法");
     4 };  //注意匿名方法后有分号
     5 ac1 += delegate ()
     6 {
     7     Debug.Log("多播委托");
     8 };
     9 ac1 += Fun1;
    10 ac1 -= Fun1;
    11 if (ac1 != null)  //多播委托可能会撤销到一个方法也没有了,注意判空
    12     ac1();
  • 相关阅读:
    分布式系统之CAP原理
    分布式缓存一致性哈希算法
    数据库三范式 无重复列 完全依赖主键 属性不依赖非主属性
    二叉树 B-树B+树
    数据库索引 主键 聚集索引 非聚集索引
    数据库水平拆分
    线程池ScheduledThreadPoolExecutor
    线程池之ThreadPoolExecutor
    mybatis一级缓存和二级缓存
    vue框架的搭建
  • 原文地址:https://www.cnblogs.com/tomatokely/p/15761903.html
Copyright © 2011-2022 走看看