C# Action和Func

Action 委托(有多种类型Action<T1,T2,,,,>):

封装一个方法,无返回值

可以使用此委托以参数形式传递方法,而不用显式声明自定义的委托。 封装的方法必须与此委托定义的方法签名相对应。 封装的方法不得有返回值。 通常,这种方法用于执行某个操作。

下面举个例子演示不带参数和带一个参数的实现,其他的则是类似;

先定义一个类

public class Person{

	string name ;


	public Person (string name_)
	{
		name = name_;
	}

	public void ShowName()
	{
		Debug.Log ("name = " + name);
	}
	public void ChangeName(string name_)
	{
		name = name_;
		Debug.Log ("change Name = " + name);
	}
}
Person类中有一个ShowName无参方法用来显示名字, 一个ChangeName有参数方法用来更改名字的(都无返回类型);


我们可以这样使用:

		Person per = new Person ("fucun");
		ac = per.ShowName ;
		ac2 = per.ChangeName;
		ac ();
		ac2 ("fucun2");

或者与匿名方法一块使用:

		Person per = new Person ("fucun");
		Action ac = delegate() {
			per.ShowName() ;
		} ;
		Action<string> ac2 = delegate(string s) {
			per.ChangeName (s);
		};
		ac ();
		ac2 ("fucun2");

或者与lambda表达式一块使用:

		Person per = new Person ("fucun");
		Action ac = () => {per.ShowName ();};//{}可有可无
		Action<string> ac2 = (s) => per.ChangeName (s);
		ac ();
		ac2 ("fucun2");


Func<TResult> 委托(有多种类型Func<T1,T2,,,,TResult>):

封装一个方法,有返回 TResult 参数指定的类型值

现在我们把Person类稍微修改一下:


public class Person{

	string name ;


	public Person (string name_)
	{
		name = name_;
	}
	public string GetName(){

		return name;
	}
	public bool CheckNameIsSame(string name_)
	{
		return name == name_;
	}
}


我们可以这样使用:

		Person per = new Person ("fucun");
		Func<string> fc = per.GetName;
		Func<string , bool> fc2 = per.CheckNameIsSame;
		string name = fc ();
		bool result = fc2 ("fucun2");



这时,返回的name 为 fucun , result 为false;


其与匿名方法和lambda的结合使用在此就不一一列出了,可以自己测试;


可以说:Action 与 Func的区别在于Action 无返回值,而Func有返回值。


参考:

https://msdn.microsoft.com/zh-cn/library/system.action(v=vs.110).aspx

https://msdn.microsoft.com/zh-cn/library/bb534960(v=vs.110).aspx



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值