unity3D学习委托进阶、回调函数(三)(2)

2019-06-05 09:04

} else { Debug.Log(string.Format(\返回为false,未找到baby哭的原因\return false; } } ///

/// 方法02 /// /// public bool Comparison02(bool iscry) { //...操作一些东西 if (iscry) { Debug.Log(string.Format(\心情 不错,增加亲密度+60.\return true; } else { Debug.Log(string.Format(\心情 很差,降低亲密度-20.\return false; } } }

注:在上面代码中

//==================

ComparisonEventHandler _Comparison = Comparison01; ComparisonEventHandler _Comparisons = Comparison02; //==================

红色的 部分,泛型委托,在给委托变量绑定方法时,委托

ComparisonEventHandler后一定要跟一个类型参数,且该参数与将要被绑定方法的参数一样的类型。 如果不写,将报错

运行 如下:

ok,没问题

使用泛型类型可以最大限度地重用代码、保护类型的安全以及提高性能。 三、方法和委托异步调用

通常情况下,如果需要异步执行一个耗时的操作,我们会新起一个线程,然后让这个线程去执行代码。但是对于每一个异步调用都通过创建线程来进行操作显然会对性能产生一定的影响,同时操作也相对繁琐一些。

c# 中可以通过委托进行方法的异步调用,就是说客户端在异步调用方法时,本身并不会因为方法的调用而中断,而是从线程池中抓取一个线程去执行该方法,自身线程(主线程)在完成抓取线程这一过程之后,继续执行下面的代码,这样就实现了代码的并行执行。

使用线程池的好处就是避免了频繁进行异步调用时创建、销毁线程的开销。

而当使用异步调用时,更多情况下是为了提升系统的性能,而在这种情况下使用异步编程时,就需要进行更多的控制,

比如:当异步执行方法的方法结束时通知客户端、返回异步执行方法的返回值等。这里我就对BeginInvoke()方法、EndInvoke()方法和其相关的IAysncResult做一个简单的介绍。 先看一段不使用异步调用的通常情况

using UnityEngine; using System.Collections; using System.Threading; using System; public class test : MonoBehaviour { // Use this for initialization void Start() { Debug.Log(\程序开始运行:\Thread.CurrentThread.Name = \Calculator cal = new Calculator(); int result = cal.Add(6, 8); Debug.Log(string.Format(\结果为: {0}\\n\// 做某些其它的事情,模拟需要执行3 秒钟 for (int i = 1; i <= 3; i++) { Thread.Sleep(TimeSpan.FromSeconds(i)); Debug.Log(string.Format(\线程:{0}: 执行了 {1} s 时间(s).\} Debug.Log(\其它的事情完成\} public class Calculator { public int Add(int x, int y) { if (Thread.CurrentThread.IsThreadPoolThread) { Thread.CurrentThread.Name = \}


unity3D学习委托进阶、回调函数(三)(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:白银市廉政考试题库选编 Microsoft Office Word 97-2003 文档 (2

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: