C#基础18:内置委托类型Action和Func

前文: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));          //注意只会输出最后一个返回值,这个测试其实没什么意义
    }
}
原创文章 1134 获赞 1439 访问量 61万+

猜你喜欢

转载自blog.csdn.net/Jaihk662/article/details/97135883