首页 > 学院 > 开发设计 > 正文

[C#] 委托之Action和Func区别

2019-11-17 03:06:58
字体:
来源:转载
供稿:网友

[C#] 委托之Action和Func区别

一、说明

一般我们定义委托都是有如下两步:

public delegate void MyDelegate(string name);//定义委托
public MyDelegate myDelegate; //使用委托

但.Net也提供了定义好的委托,我们可以直接使用。

二、定义

System.Action 无返回值
Action:public delegate void Action ();Action< T >:public delegate void Action< T > (T obj);Action< T1, T2 >:public delegate void Action< T1, T2 > (T1 arg1, T2 arg2);
* delegate void Action<T1,T2,T3,T4>T1 arg1, T2 arg2, T3 arg3, T4 arg4);

System.Func 有返回值
Func< TResult >public delegate TResult Func< TResult > ();Func< T,TResult >public delegate TResult Func< T, TResult > (T arg);Func< T1,T2,TResult >public delegate TResult Func< T1, T2, TResult > (T1 arg1, T2 arg2);
*delegate TResult Func<T1,T2,T3,T4,TResult>T1 arg1, T2 arg2, T3 arg3, T4 arg4);

三、使用

例子1:Action
using UnityEngine;using System.Collections;using System;public class ActionTest : MonoBehaviour {    void Start () {        Action action = XXX;        action();    }    void XXX()    {        Debug.Log("100");    }}
例子2:Action<T>using UnityEngine;using System.Collections;using System;public class ActionTest : MonoBehaviour {    void Start () {        Action<string> action = XXX;        action("unity C#");    }    void XXX(string name)    {        Debug.Log(name);    }}
例子3:Action<T1,T2>using UnityEngine;using System.Collections;using System;public class ActionTest : MonoBehaviour {    void Start () {        Action<string,int> action = XXX;        action("unity C#",100);    }    void XXX(string name,int score)    {        Debug.Log(string.Format("{0}  {1}",name,score);    }}
#region Action的用法    ///Action<T>的用法    ///这里的T为代理函数的传入类型,无返回值    Action<string[]> action = delegate(string[] x)    {        var result = from p in x                     where p.Contains("s")                     select p;        foreach (string s in result.ToList())        {            Console.WriteLine(s);        }    };    string[] str={ "charlies","nancy","alex","jimmy
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表