前文:https://blog.csdn.net/Jaihk662/article/details/97130647(匿名方法与Lambda表达式)
一、Action泛型委托
Action 为 System 内置的无返回值委托,只需要引用 System 库就可以直接使用而不用定义,有以下几种形式
- public delegate void Action();
- public delegate void Action<T1>(T1 arg1);
- public delegate void Action<T1, T2>(T1 arg1, T2 arg2);
- public delegate void Action<T1, T2, T3>(T1 arg1, T2 arg2, T3 arg3);
- public delegate void Action<T1, T2, T3, T4>(T1 arg1, T2 arg2, T3 arg3, T4 arg4);
- ……
一个使用的例子如下(功能:给予a和b,输出它们加减乘除后的结果):
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class Subject : MonoBehaviour
{
private void Start()
{
Action<int, int> delt = (int a, int b) => Debug.Log(a + b); //直接用Lambda表达式
delt += (int a, int b) => Debug.Log(a - b);
delt += (int a, int b) => Debug.Log(a * b);
delt += (int a, int b) => Debug.Log(a / b);
delt(5, 3);
}
}
二、Func泛型委托
Func 为 System 内置的有返回值委托,只需要引用 System 库就可以直接使用而不用定义,有以下几种形式
- public delegate TResult Func<TResult>();
- public delegate TResult Func<T1, TResult>(T1 arg1);
- public delegate TResult Func<T1, T2, TResult>(T1 arg1, T2 arg2);
- public delegate TResult Func<T1, T2, T3, TResult>(T1 arg1, T2 arg2, T3 arg3);
- public delegate TResult Func<T1, T2, T3, T4, TResult>(T1 arg1, T2 arg2, T3 arg3, T4, arg4);
- ……
一个使用的例子如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class Subject : MonoBehaviour
{
private void Start()
{
Func<int, int, string> delt = (int a, int b) => (a+b).ToString();
delt += (int a, int b) => (a * b).ToString();
delt += (int a, int b) => (a - b).ToString();
delt += (int a, int b) => (a / b).ToString();
Debug.Log(delt(5, 3)); //注意只会输出最后一个返回值,这个测试其实没什么意义
}
}