using System;
using UnityEngine;
public class Project_Delegate_Action : MonoBehaviour
{
//委託類型 【Action】範例
//Action 不支持返回值
Action mAction;
Action<int, int> mAction2;
// 使用Func來實現帶有返回值的委託調用
// Func 可綁定帶有返回值的方法,並接收返回的結果
void Start()
{
// // 第一種應用,將方法當成參數傳遞
// Test(Test2);
//第二中應用,將方法【Test2()】綁定到委託【mAction】,在委託調度時,將執行所有綁定方法
mAction += Test2;
mAction += Test3;
mAction();
//不需要調用時
mAction -= Test3;
mAction();
// 傳遞參數
// += 用於多個方法綁定
// = 直接綁定唯一方法
mAction2 = Test4;
mAction2(100,300);
//mAction2 += Test5; //傳回值報錯
//因為Action不支持有返回值的方法,所以要用Func 綁定帶有返回值的方法,並接收返回的結果
}
public void Test(Action action)
{
Debug.Log("執行完Test方法!");
if (action != null)
{
action();
}
}
public void Test2()
{
Debug.Log("Test2 調用了!");
}
public void Test3()
{
Debug.Log("Test3 調用了!");
}
public void Test4(int a, int b)
{
Debug.Log("Result : " + (a + b));
}
// mAction2 綁定 Test5 時會報錯,因為 Action 不支持有返回值的方法綁定
public int Test5(int a, int b)
{
return(a+b);
}
}