zoukankan      html  css  js  c++  java
  • Unity3D 利用C#实现简单的代理模式Delegate(委托)

    1、Delegate是什么?

    Delegate中文翻译为“委托”。
    C#语言是支持代理的,并且代理是非常的好用的一种方式。简单的来说就是你委托别人帮你做一件事情,当委托人做完你委托的事情之后会告诉你他做完了。C#中的委托类似于C或C++中的函数指针。使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法。与C或C++中的函数指针不同,委托是面向对象、类型安全的,并且是安全的。

    先简单的使用一下Delegate(委托)

    直接代码:

    代理的声明,在开发中应该有一个专门用来委托的类。

     1 using UnityEngine;
     2 using System.Collections;
     3 public class DelegateTest : MonoBehaviour
     4 {
     5     public delegate void LogMessageDelegate(string message); //委托的标识符就是delegate,LogMessageDelegate(string message)就是委托完毕后回调的方法名称 
     6 
     7     public static event LogMessageDelegate logMessage; //委托的事件
     8     void Start()
     9     {
    10         if (logMessage != null)
    11         {
    12             logMessage("delegate test"); //在需要的地方通过委托的事件将委托的参数传递进去即可实现委托。
    13         }
    14     }
    15 }

    使用代理

     1 using UnityEngine;
     2 using System.Collections;
     3  
     4 public class UseDelegateTest : MonoBehaviour
     5 {
     6     //在OnEnabel和OnDisable中启动与关闭委托,这也是为什么DelegateTest中要判断一下委托是否为空。如果为空的话是会有错误的。
     7     void OnEnable()
     8     {
     9         DelegateTest.logMessage += LogMessage;
    10     }
    11 
    12     void OnDisable()
    13     {
    14         DelegateTest.logMessage -= LogMessage;
    15     }
    16 
    17     public void LogMessage(string message)
    18     {
    19         Debug.Log("log message " + message);
    20     }
    21 
    22 }
  • 相关阅读:
    centos6.5 安装redis自动启动
    正则去除字符串中的特殊字符
    数据库存储去重
    pymysql.err.ProgrammingError: (1064)(字符串转译问题)
    [转] Linux下SVN的三种备份方式
    ASP.NET ASHX中访问Session
    ionic 里使用 iframe 可能遇到的问题
    ionic $http 无法正常访问外部web服务器的问题
    Mac下80端口相关
    IIS7 无法写入配置文件web.config 错误
  • 原文地址:https://www.cnblogs.com/UnrealEra/p/5892641.html
Copyright © 2011-2022 走看看