Unity3D技术交流 加入小组

18个成员 13个话题 创建时间:2015-09-15

委托、事件、观察者模式、事件驱动程序设计

发表于2016-03-14 1267次查看

概述:
委托就像一个接口,具体方法实现这个接口,而我们只需要了解委托的定义就可以调用。
1.委托:
A.委托的作用:
     a.占位,让其他方法帮你做事-----解耦。
     b.将方法(一个或绑定后的多个方法)作为方法的参数-----封装方法。
B.委托的使用:
//将星爷电影国际化,实现双语orN语字幕
     public class SubTitle
     {
          public void English()
          {
               Debug.Log("What difference does it make between people and salty fish if men don‘t have dreams?");
          }
          public void Chinese()
          {
               Debug.Log("做人如果没有梦想跟咸鱼有什么分别?");
          }
          public static void Bird()
          {
               Debug.Log("bb bbbbbbbbbb bb?");
          }
     }
//鸟说:我也有梦想

    void BirdSay( LanguageDelegete la )

    {

        la ();

    }

     a.声明委托
     public void delegete LanguageDelegete();//注意委托的签名与绑定的方法要一致,这里没有参数
     b.创建Delegete对象
     LanguageDelegete allLanguage = new LanguageDelegete(Subtitle.Bird);   (另一种方法:LanguageDelegete allLanguage = Subtitle.Bird ;//代理静态方法)
     c.绑定多个方法(多路广播委托)

     BirdSay( allLanguage ); //将方法作为方法的参数使用

 

     subTitle = new Subtitle();

     allLanguage += subTitle . English;//代理实例方法

     allLanguage += subTitle . Chinese;//封装方法

     allLanguage -= Subtitle . Bird;

    d.调用委托
     allLanguage ();
输出:注意顺序
 

file:///C:/Users/Anchor/AppData/Local/Temp/enhtmlclip/Image(10).png
C.为什么要用委托:
    在C++中有函数指针,可以用来指向函数的引用,而C#中则没有,那怎么办呢?通过以上学习你会发现委托和指针十分相似,但是委托还具有函数指针所不具备的优点:在C++中我们经常遇到空指针等问题,而委托则不需要担心,即委托是面向对象,类型安全的,不用顾虑无效地址和地址越界等问题。下次我们继续为大家讲解事件机制。


    PS:其实语言只是个工具,学习以上这些知识其实都是在打磨你的工具,这样我们才能做出更加出色的产品,如果你的工具现在还是个铁杵,那么跟着我一起把它磨成针吧,只要坚持,总有一天你会编织出属于自己的梦想!!  

如果你对独立游戏,体验艺术,设计学,心理学感兴趣, 欢迎关注我的新公众微信:黑客画家  我的主页:anchorart9.com ,我的一些学习笔记,心得,行业咨询等内容将逐步更新上去。

发表回复
你还没有登录,请先 登录或 注册!