协程+www+委托

版权声明:本文为博主原创文章,未经博主允许不得转载。 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:个人浅见,略略略

猜你喜欢

转载自blog.csdn.net/itsxwz/article/details/81387143