Func委托是有返回值的委托,Func有多个参数时,最后一个参数代表返回值,其他的代表形参
委托使用场景1,调用委托,可以分发多个方法出去。举例:定义多个通知不同人的信息,例如经理,员工,客户。可以针对性的制定不同的通知,调用委托,可以一次性的群发给他们。
委托使用场景2,方法的参数是个方法,例如按钮方法,参数是一个点击事件的方法,可以通过委托实现点击事件的方法。
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//Func委托是有返回值的委托,Func有多个参数时,最后一个参数代表返回值,其他的代表形参
//委托使用场景1,调用委托,可以分发多个方法出去。举例:定义多个通知不同人的信息,例如经理,员工,客户。可以针对性的制定不同的通知,调用委托,可以一次性的群发给他们。
//委托使用场景2,方法的参数是个方法,例如按钮方法,参数是一个点击事件的方法,可以通过委托实现点击事件的方法。
public class Demo : MonoBehaviour
{
Func<int> sendMessage1;
Func<string, int> sendMessage2;
Func<int, string> buttonClick;
void Start()
{
sendMessage1 += SendMessageToCustomer;
sendMessage1 += SendMessageToManager;
sendMessage1();
sendMessage2 += SendMessageToCustomer2;
sendMessage2 += SendMessageToManager2;
sendMessage2("123");
//常规写法
CreateButton(buttonClick += ButtonClickMethod);
//简化写法
CreateButton(ButtonClickMethod);
}
public int SendMessageToManager()
{
Debug.Log("给经理发信息 0");
return 0;
}
public int SendMessageToCustomer()
{
Debug.Log("给客户发信息 0");
return 0;
}
public int SendMessageToManager2(string str)
{
Debug.Log($"给经理发信息次数 = {str}");
try
{
return Convert.ToInt32(str);
}
catch (Exception ex)
{
Debug.Log($"error = {ex}");
return 0;
}
}
public int SendMessageToCustomer2(string str)
{
Debug.Log($"给客户发信息次数 = {str}");
try
{
return Convert.ToInt32(str);
}
catch (Exception ex)
{
Debug.Log($"error = {ex}");
return 0;
}
}
public void CreateButton(Func<int, string> myButtonClick)
{
myButtonClick(100);
}
public string ButtonClickMethod(int num)
{
Debug.Log($"按钮点击事件,模拟点击次数 = {num}");
return num.ToString();
}
}