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 arg1);
  • public delegate void Action(T1 arg1, T2 arg2);
  • public delegate void Action(T1 arg1, T2 arg2, T3 arg3);
  • public delegate void Action(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 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();
  • public delegate TResult Func(T1 arg1);
  • public delegate TResult Func(T1 arg1, T2 arg2);
  • public delegate TResult Func(T1 arg1, T2 arg2, T3 arg3);
  • public delegate TResult Func(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 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));          //注意只会输出最后一个返回值,这个测试其实没什么意义
    }
}

 

你可能感兴趣的:(C#)