unity C# OOP学习笔记之六(委托)

什么是委托
委托是方法的代理,委托的是方法,当调用委托时就是调用了这个方法.
委托是一类行为的抽象
当调用委托时就是调用了这个方法。
【委托能存储方法的地址{引用}】【间接调用】(没有直接调用好 但是灵活)

委托的定义:委托是一种数据类型(声明了返回类型和参数组成的数据类型);
委托代表的是方法,【代表和委托签名一样的任何方法】
当调用委托时就是调用了这个方法。

签名
有时 返回类型和参数组成【委托】
有时 方法名和参数组成【隐藏】
有时方法名和参数组成 返回类型【重写】
为啥用委托
软件中:委托可以实现对方法的【间接】调用! 灵活=维护性好

委托的使用【基本步骤】 3步!!
步骤1【定义端】:定义委托
delegate 返回值 方法签名;
例如:delegate void Handler(); 习惯命名:SelectHandler
步骤2【调用端】:创建实例
【实例化委托:为委托指定{绑定}方法,只有方法名不用写括号

步骤3【调用端】:调用委托【和调方法相似,有参数就要写参数,有返回值可以返回】

namespace 委托
{
    //创建委托
    delegate void PrintHandle();
    delegate int CalHandle(int x ,int c );
    class 委托
    {
        static void Main(string[] args)
        {
            //绑定委托
            PrintHandle print = new PrintHandle(new F().F1);
            CalHandle cal = new CalHandle(F.F2);
            //调用委托
            print();
            cal(2,3);
        }
    }
    class F
    {
        public void F1()
        {
            Console.WriteLine("委托");
        }
     static   public int F2(int item,int item01)
        {
            return item + item01;
        }
    }
}

委托的分类 调用【使用】方式
1单播委托:一个委托对象只关联一个方法
2多播执行:一个委托对象关联多个方法 只返回最后方法的结果
所以:委托有返回值不适合多播执行!委托无返回值适合多播执行!

实例化委托多种写法
委托的使用步骤:三步 1:定义2:实例化委托(多种写法) 3:调用委托

1.方式一:基本传统标准的写法 上面写的就是的
2.方式二
PrintHandle print = new PrintHandle(new F().F1);
PrintHandle print =new F().F1简化的写法 等号右边 表示的是委托对象
3.方式三:匿名方法,适合于:
功能简单少量代码可以完成,且该功能不需要在其它地方复用.
Handler handler = delegate(int a) 等号右边 表示的是委托对象=匿名方法
{
for (int i = 0; i < a; i++)
Console.WriteLine(“HAHA”);
};
**方式四:Lambda 表达式,**适合于:
写法一:功能简单少量代码可以完成,且该功能不需要在其它地方复用
写法二:功能代码超简单,一行代码可以完成
Lambda 表达式语法:
委托类型 委托对象名=Lambda 表达式;
写法一 (参数)=>{语句} => goto
(参数1,参数2)=> 一行代码;
简化写法二 (只有一个参数和一句话) 一个参数=>一行代码;return不能写有返回值也不写

Handler handler = § => Console.WriteLine(p + “HAHA”);
等号右边 表示的是委托对象=Lambda 表达式=匿名方法

namespace 委托
{
    //创建委托
    delegate void PrintHandle();
    delegate int ItemHandle(int a);
    delegate int CalHandle(int x ,int c );
    class 委托
    {
       
        static void Main()
        {
            //实例化委托多种写法
            //第一种
            PrintHandle printHandle = new PrintHandle(F.F1);
            //第二种
            CalHandle calHandle = F.F2;
            //第三种匿名
            CalHandle cal = delegate (int a, int b)
             {
                 return a * b;
             };
            //第四种lamber表达式
            CalHandle handle = (int a, int b) => { return 66; };
            //要不要int都行
            CalHandle handle =  (a,b) => { int c = a + b + b; return c; };
            CalHandle handle =  (a,b) => { return 66; };
            //如果后面只有一句话可以写成
            handle += (int a, int b) =>  66;
            //如果一个参数一句可以写成
            ItemHandle itemHandle = b=> b; 

        } 
    }
    class F
    {
       static public void F1()
        {
            Console.WriteLine("委托");
        }
        static public int F11(int a)
        {
            return a;
        }
        static   public int F2(int item,int item01)
        {
            return item + item01;
        }
        static public int F3(int item, int item01)
        {
            return item - item01;
        }
    }
}

委托的作用 用途 实际应用!

  1. 将方法做为参数传递,可以将一个方法的执行代码注入到另一个方法中
    举个例子 list.Find()的方法就是要自己写方法
    2定义算法/方法时 :
    有的语句/步骤能定下来,有的暂时定不下来
    可以使用委托表示确定不下来的
    调用时再确定 把有些功能推迟到客户端【调用端】确定!
  2. 实现回调,实现的方式比接口更灵活
    回调
    含义 1 方法 系统调用的 【不是程序员直接调用的】
    含义 2 这里的含义
    定义方法 有些定义时确定不下来,留给客户端确定
    调用时候,从 调用端 到定义端
    回到调用端 再到定义端执行 【灵活性】
    回到调用端,结束
    1》 接口可以作为方法的参数!
    2》 委托可以作为方法的参数!
    3》 有何不同?委托可以实现回调,作为参数,比接口更灵活
  3. 事件实现的基础
  4. 实现任意方法的异步调用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值