zoukankan      html  css  js  c++  java
  • C# For Unity 编程笔记(委托)

    1.委托

    //事例中的代码均不是严格的代码规范,只作为理解参考
    委托定义:
    1 //定义一个委托,参数一个,类型为int,返回值为void
    2 delegate void Test(int x);
    3 //定义一个和委托返回值和参数类似一致的函数,并赋予给委托
    4 void TestFunction(int x){}
    5 Test = TestFunction;
    // 创建方法二 
    delegate void TestStr();
    //实例化委托,并将符合条件的方法填入,s() == xxx.ToString() == s.Invoke();
    TestStr s = new TestStr(xxx.ToString);
     
    委托作为参数:(模仿回调函数)
     
    //声明一个委托
    delegate void CallHandler();
     
    //CallHandler类型的委托作为参数
     1 void OnComplete(CallHandler call)
     2 {
     3      call();
     4 }
     5  
     6 //符合委托的一个函数
     7 void Test(){}
     8  
     9 void Main()
    10 {
    11      OnComplete(Test);
    12 }
     
    C#内置的委托(内置的委托几乎可以指向所有的方法)
    1.Action委托(永远没有返回值)
    例子:
    1 // Action 是一个可以指向一个没有返回值,没有参数的一个委托
    2 Action a = Test;
    3 void Test(){}
    1 // Action<T>是一个可以指向一个没有返回值,有T类型的参数的一个委托
    2 Action<int> b = TestInt;
    3 void TextInt(int x){}
    1 //多参数和Action<T>类似,写法诸如Action<T , N  , S>
    2 Action<string , int> c = TestStr;
    3 void TestStr(string str , int i){}
    PS:参数最多支持16个参数
     
    2.Func委托(必须有返回值)
     
     1 //泛型里面的参数为函数的返回值(泛型必须有参数)
     2 Func<int> a = Test;
     3 int Test(){}
     4  
     5 //最后一个类似为返回值,前面的类型为参数类型
     6 Func<string ,int> b = Test;
     7 int Test(string str){}
     8  
     9 //多参数情况,最后一个为返回值,函数的参数也必须按委托的参数顺序来
    10 Func<string ,string ,int> c = Test;
    11 int Test(string ,str1,string str2){}
    PS:参数最多支持16个参数
     
    多播委托(一个委托指向多个函数,一般返回值为空,因为不能返回所有的返回值)
    例子:
     1 void Test1(){print("Test1")}
     2 void Test2(){print("Test2")}
     3  
     4 Action a = Test1();
     5 a += Test2();
     6 print(a);//输出Test1,Test2
     7  
     8 a -= Test2();
     9 print(a);//输出Test1
    10  
    11 //PS:如果委托是有返回值的,则返回值为所添加的最后一个函数的返回值
    12 //PS:如果加入的函数中只要有一个出现异常,则所有的函数运行结束
    13 int Test3{return 3}
    14 int Test4{return 4}
    15 Func<int> b = Test3;
    16 b += Test4;
    17 print(b);//输出 4
  • 相关阅读:
    42.纯 CSS 创作一个均衡器 loader 动画
    41.纯 CSS 绘制一支栩栩如生的铅笔
    1.如何在Cloud Studio上执行Python代码?
    2.每个 HTML 文件里开头都有个<!DOCTYPE>
    39.纯 CSS 创作一个表达怀念童年心情的条纹彩虹心特效
    LOJ #2127. 「HAOI2015」按位或 min-max容斥+FWT
    HDU
    LOJ #3044. 「ZJOI2019」Minimax 搜索 动态DP+概率
    LOJ #3043. 「ZJOI2019」线段树 线段树+分类讨论
    Comet OJ
  • 原文地址:https://www.cnblogs.com/seabrea/p/4812920.html
Copyright © 2011-2022 走看看