delegate/event以及Action/Function

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class E : MonoBehaviour
{
    public delegate void Delegate();
    public event Delegate OnCall;
    public Delegate OnCallDe;
    void init()
    {
        OnCall();
        OnCallDe();
    }
}

public class Test
{
    E _a = new E();
   
    public void Init()
    {
        //也可以用+= -=
        _a.OnCallDe = Onde;
        //这里报错不能用等于
        //_a.OnCall = Onde;
        _a.OnCall += Onde1;
    }

    public void Onde()
    {
        Debug.LogError("Onde");
    }
    public void Onde1()
    {
        Debug.LogError("-------------Onde1");
    }
    public void Onde2()
    {
        if (_a.OnCallDe!=null){
            _a.OnCallDe();
        }
        //这里报错,不能在外部用用
        //if (_a.OnCall!= null)
        //{
        //    _a.OnCall();
        //}
        Debug.LogError("!!!!!!!!!Ond2e2");
    }
}

Action 跟 Fun 是c#对delegate的封装

Action委托具有Action<T>、Action<T1,T2>、Action<T1,T2,T3>……Action<T1,……T16>多达16个的重载,其中传入参数均采用泛型中的类型参数T,涵盖了几乎所有可能存在的无返回值的委托类型。

Func则具有Func<TResult>、Func<T,Tresult>、Func<T1,T2,T3……,Tresult>17种类型重载,T1……T16为出入参数,Tresult为返回类型。

posted @ 2020-10-29 16:23  Elijah_j  阅读(70)  评论(0编辑  收藏  举报