委托的N种写法,你喜欢哪种? – alert(dong)

一、委托调用方式

1. 最原始版本:

delegate string PlusStringHandle(string x, string y);
class Program
{
static void Main(string[] args)
{
PlusStringHandle pHandle
= new PlusStringHandle(plusString);
Console.WriteLine(pHandle(
abc, edf));

Console.Read();
}

static string plusString(string x, string y)
{
return x + y;
}
}

 2. 原始匿名函数版:去掉“plusString”方法,改为

PlusStringHandle pHandle = new PlusStringHandle(delegate(string x, string y)
{
return x + y;
});
Console.WriteLine(pHandle(
abc, edf));

3. 使用Lambda(C#3.0+),继续去掉“plusString”方法(以下代码均不再需要该方法)

PlusStringHandle pHandle = (string x, string y) =>
{
return x + y;
};
Console.WriteLine(pHandle(
abc, edf));

还有更甚的写法(省去参数类型)

PlusStringHandle pHandle = (x, y) =>
{
return x + y;
};
Console.WriteLine(pHandle(
abc, edf));

如果只有一个参数

delegate void WriteStringHandle(string str);
static void Main(string[] args)
{
//如果只有一个参数
WriteStringHandle handle = p => Console.WriteLine(p);
handle(
lisi);

Console.Read();
}

 

二、委托声明方式

1. 原始声明方式见上述Demo

2. 直接使用.NET Framework定义好的泛型委托 Func 与 Action ,从而省却每次都进行的委托声明。

static void Main(string[] args)
{
WritePrint
<int>(p => Console.WriteLine({0}是一个整数, p), 10);

Console.Read();
}

static void WritePrint<T>(Action<T> action, T t)
{
Console.WriteLine(
类型为:{0},值为:{1}, t.GetType(), t);
action(t);
}

3. 再加上个扩展方法,就能搞成所谓的“链式编程”啦。

class Program
{
static void Main(string[] args)
{
string str = 所有童鞋:.plusString(p => p = p + girl: lisi、lilirn).plusString(p => p + boy: wangwu) ;
Console.WriteLine(str);

Console.Read();
}
}

static class Extentions
{
public static string plusString<TParam>(this TParam source, Func<TParam, string> func)
{
Console.WriteLine(
字符串相加前原值为:{0}。。。。。。, source);
return func(source);
}

}

看这个代码是不是和我们平时写的”list.Where(p => p.Age > 18)”很像呢?没错Where等方法就是使用类似的方式来实现的。

好了,我总结完了,如有遗漏,还望补上,臣不尽感激。

 


 yin荡的分割线,我的个人原创,请认准 http://freedong.cnblogs.com/ (转摘不标原文出处可耻)

 

本文链接:http://www.cnblogs.com/FreeDong/p/3227638.html,转载请注明。



You must enable javascript to see captcha here!

Copyright © All Rights Reserved · Green Hope Theme by Sivan & schiy · Proudly powered by WordPress

无觅相关文章插件,快速提升流量