一、概念
1、委托:将方法以变量的形式传递,并且以方法的形式执行。他是类,是引用类型。
2、事件:功能被限制的一个委托变量。它的类型是委托类型。
3、委托的三种形式
3.1、delegate: 四步(声明,实例化,注册方法,调用)
3.2、Action:添加的方法不能有返回值
3.3、Func: 添加的方法要有返回值
二、测试委托和事件
using UnityEngine;
public class DelegateAndEvent : MonoBehaviour
{
//声明 带一个参数并且无返回值的委托
public delegate void TestDlg(string content);
//TestDlg 类型的事件
public event TestDlg TestDlgEvent;
void Start()
{
//委托的解释:将方法以变量的形式传递,并且以方法的形式执行
TestDlg dlg = TestDlg01;
dlg += TestDlg02;//委托链
dlg -= TestDlg02;
dlg = TestDlg01;
dlg("测试");
//事件 功能被限制的一个委托变量 它的类型是委托类型
//通过+=添加通知订阅事件
//通过-=取消通知订阅事件
//注册事件
// TestDlgEvent += DelegateAndEventTest_TestDlgEvent;
// TestDlgEvent -= DelegateAndEventTest_TestDlgEvent;
TestDlgEvent = DelegateAndEventTest_TestDlgEvent;
if (TestDlgEvent != null)
{
TestDlgEvent("测试");//调用事件
}
}
public void TestDlg01(string content)
{
Debug.Log(content + "这是委托01");
}
public void TestDlg02(string content)
{
Debug.Log(content + "这是委托02");
}
private void DelegateAndEventTest_TestDlgEvent(string content)
{
Debug.Log(content + "这是事件01");
}
private void DelegateAndEventTest_TestDlgEvent02(string content)
{
Debug.Log(content + "这是事件02");
}
}
三、测试Action
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ActionTest : MonoBehaviour
{
private delegate void MyDlg(string s);//声明
MyDlg mydlg;//实例
//使用Action直接把委托的声明给绕过去了,直接实例化一个Action
private Action<string> _actionTest;
void Start()
{
mydlg += DlgTest;
mydlg?.Invoke("执行委托");//?的意思就是mydlg不为空执行后面的语句,为空不执行
// _actionTest += DlgTest;
// _actionTest?.Invoke("执行Action");
}
private void DlgTest(string content)
{
Debug.Log(content);
}
}
四、测试Func
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FuncTest : MonoBehaviour
{
private Func<string, string, int> _funcSum;
void Start()
{
//var是隐式类型,根据后面的代码去推断是哪一种类型
_funcSum += ParseSum;
var sum = _funcSum?.Invoke("4", "5");
Debug.Log(sum);
}
private int ParseSum(string s1, string s2)
{
int sum = int.Parse(s1) + int.Parse(s2);
return sum;
}
}
感谢大家的观看,您的点赞和关注是我最大的动力
不定时更新知识点和干货呦~