版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/itsxwz/article/details/81387143
using System.Collections;
using UnityEngine;
public class TestDelegate : MonoBehaviour {
#region--Define Variables
public delegate int Delegate1(WWW _www);
public delegate IEnumerator Delegate2(WWW _www, Delegate1 _d1);
#endregion
#region--System Functions
void Start () {
WWW www = new WWW("Assets/");
Delegate1 d1 = Function1;
Debug.Log(Function1(www));
Debug.Log("---------------------------------------------------");
Debug.Log(d1(www));
Debug.Log("---------------------------------------------------");
Delegate2 d2 = Function2;
StartCoroutine(Function2(www, d1));
Debug.Log("---------------------------------------------------");
StartCoroutine(Function2(www, Function1));
Debug.Log("---------------------------------------------------");
StartCoroutine(d2(www, Function1));
Debug.Log("---------------------------------------------------");
StartCoroutine(d2(www, Function1));
Debug.Log("---------------------------------------------------");
Delegate1 d11 = Function3();
d11(www);
}
#endregion
#region--Define Functions
public int Function1(WWW _www) {
int num = 10;
//...
Debug.Log("这个方法与委托1绑定");
return num;
}
public IEnumerator Function2(WWW _www,Delegate1 _d1) {
Debug.Log("这个方法与委托2绑定");
_d1(_www);
yield return new WaitForEndOfFrame();
}
public Delegate1 Function3() {
Delegate1 d1 = Function1;
return d1;
}
#endregion
}
1.上述代码已验证,输出结果符合预期情况,运行过程无bug产生。
2.值类型、引用类型作为参数不做讨论,主要是思考委托与方法的绑定,委托作为函数形参、函数返回值类型等情况的思考。
3.可以声明一个委托,在调用具有委托作为函数形参的方法时,可以直接传入与委托对应的函数名即可;也可以先绑定一个委托变量,调用时传入该变量。
4.委托作为函数返回值,调用该委托,则函数执行;反之不执行。
5.委托对应的函数,应该是返回值类型一致、函数参数列表一致的。
6.绑定函数到一个委托时,该函数不会被调用(类似同名函数,执行功能一致,共享同一代码段)。
ps:个人浅见,略略略