[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","selina"};
action(str);
Console.ReadKey();
#endregion
上面的例子是通过传入的String类型的数组,找出其中包含有字符s的项,然后输出到控制台。
例子4:Func<TResult >
using UnityEngine;
using System.Collections;
using System;
public class FuncTest : MonoBehaviour {
void Start () {
Func< int > func= XXX;
Debug.Log( func() );
}
int XXX()
{
return 10;
}
}
例子5: Func<T,TResult>
using UnityEngine;
using System; public Class FuncTest:MonoBehaviour{
void Start(){
Func<string ,int> func= CallStringLength;
} int CallStringLength(string str){
return str.Lenth;
} }
Func<string> func=delegate(){
return "我是Func<TResult>委托返回的结果";
}
Predicate只能接受一个传入参数,返回值为bool类型
#region Predicate
///bool Predicate<T>的用法
///输入一个T类型的参数,返回值为bool类型
Predicate<string[]> predicate = delegate(string[] x)
{
var result = from p in x
where p.Contains("s")
select p;
if (result.ToList().Count > 0)
{
return true;
}
else
{
return false;
}
};
string[] _value = { "charlies", "nancy", "alex", "jimmy", "selina" };
if (predicate(_value))
{
Console.WriteLine("They contain.");
}
else
{
Console.WriteLine("They don't contain.");
}
Console.ReadKey();
#endregion
上面的代码其实也是判断String数组中有没有包含s的项,有的话就在控制台打印出 They contain.没有的话就打印出They don't contain
//定义
public void CallUI<T>(Action<T, object[]> callback, params object[] args) where T : CUIBase
//调用
CUIManager.Instance.CallUI<CUIMidMsg>(
(_ui, _arg) => _ui.ShowMsg((string)_arg[0]),
string.Format(szMsg, format));
资料
部分内容参考自:风宇冲Unity3D教程学院
[C#] 委托之Action和Func区别的更多相关文章
- C#系统委托之Action And Func
Action Action<T> Func Func<T> Action:封装一个方法,该方法不具有参数并且不返回值 public delegate void Action() ...
- Action<>和Func<>区别
Action<>和Func<>其实都是委托的[代理]简写形式. 简单的委托写法: //普通的委托 public delegate void myDelegate(string ...
- 浅析C#之委托、Action、Func
一.委托 1.1 委托的定义 delegate(委托)是一种可用于封装命名方法或匿名方法的引用类型, 委托类似于 C++ 中的函数指针: .Net通过委托来提供回调函数机制. 声明一个委托类型 int ...
- Action<>和Func<> 区别
其实他们两个都是委托[代理]的简写形式. 一.[action<>]指定那些只有输入参数,没有返回值的委托 Delegate的代码: public delegate void myDeleg ...
- 委托、Action、Func使用
参考 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syste ...
- 事件,委托,action与func文章不错的
https://www.cnblogs.com/yinqixin/p/5056307.html https://www.cnblogs.com/BLoodMaster/archive/2010/07/ ...
- C#中匿名函数、委托delegate和Action、Func、Expression、还有Lambda的关系和区别
以前一直迷迷糊糊的,现在总算搞明白. Lambda表达式 Lamda表达式基本写法是()=>{ };Lambda和方法一样都可以传入参数和拥有返回值.(int x)=>{return x; ...
- Func 委托 和 Action 委托 初步谈论
继上篇EventHandler之后,继续填坑,简单了解下Func<TResult> 委托 和 Action 委托. msdn对于两者的解释: Func<TResult>:封装一 ...
- C#常见委托のdelegate定义,Func,Action,Predicate总结
委托,顾名思义,就是让其他代理,本质就是为具有共性方法组定义一个方法模板:(交流可以加qq群:435226676) 委托常见的方式有一般委托显示定义,Func<T,TResult> (T, ...
随机推荐
- HttpController的激活
Web API调用请求的目标是定义在某个HttpController类型中的某个Action方法,所以消息处理管道的最终需要激活目标HttpController对象.调用请求的URI会携带目标Http ...
- 怎样高效地去判断Array中是否包含某个值?
问题 怎样去判断Array(无序)中是否包含某个值呢? 这是一个在Java中经常被问到的问题.它也是Stack Overflow上投票前几的一个问题.下面将展示投票前几的几个回答,这些回答使用不同的方 ...
- 说反话(c++实现)
描述:给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串.字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有 ...
- 【DNN】C#中类的一些特性标注
[AttributeUsage] 其实AttributeUsage类就是描述了一个定制特性如和被使用. C# AttributeUsage的使用要明白: AttributeUsage有三个属性,我们可 ...
- Sharepoint 2013 创建TimeJob 自动发送邮件
创建Time Job 继承继承SPJobDefinition 并且实现里边的 Execute方法 部署 可以手动部署,把程序集放到GAC,手动激活feature 如果部署的时候说feature已经存在 ...
- NSMutable sort排序
Compare method Either you implement a compare-method for your object: - (NSComparisonResult)compare: ...
- HDFS简单入门
本文地址:http://www.cnblogs.com/archimedes/p/hadoop-simple.html,转载请注明源地址. 欢迎关注我的个人博客:www.wuyudong.com, 更 ...
- 内置对象Clob对从数据库表中取的字符大对象CLOB类型的列值进行读取操作
package readclobDemo.bao; import java.io.IOException; import java.io.Reader; import java.sql.Clob; i ...
- Struts2(十四)拦截器实现权限管理
一.认识拦截器 拦截器也是一个类 拦截器可以在Action被调用之前和之后执行代码 框架很多核心功能是拦截器实现的 拦截器的特点: 拦截器自由组合,增强了灵活性.扩展性.有利于系统解耦 拦截器可以拦截 ...
- iOS开发之网络编程--1、AFNetwork 3.x 的所有开发中常用基础介绍
前言:第三方网络请求框架中AFNetwork 3.x收欢迎程度相当高的: 由于iOS 7 和 Mac OS X 10.9 Mavericks 中一个显著的变化就是对 Foundation URL 加载 ...