C# 从1.x 发展到目前的 4.5,委托的写法真是越来越简单精悍。如果您对这些委托的写法不是很清晰,本文可以帮助到您。
委托是一种安全封装方法的类型,可以将方法作为方法的参数。
委派方法的参数个数、顺序、类型及方法返回值类型必须跟定义的委托方法一样,但参数名称可以不同。
1、C# 定义一个完整委托:
delegate string SayMessage(string msg); static string SayHello(string Name) { return string.Format("Hello {0}", Name); } static void Main(string[] args) { SayMessage say = new SayMessage(SayHello); Console.WriteLine(say("委托")); Console.ReadKey(); } |
输出结果:"Hello 委托"
2、C#2.0后出现了匿名方法,可以将委托方法省略掉,直接给委托传递一个匿名方法,当然也要去掉New这个动作。
delegate string SayMessage(string msg); static void Main(string[] args) { SayMessage say = delegate(string Name) { return string.Format("Hello {0}", Name); }; Console.WriteLine(say("匿名方法")); Console.ReadKey(); } |
输出结果:"Hello 匿名方法"
3、聪明的人们总是想使用更少的代码达到相同的效果。因此C#3.0 之后出现了 Lambda表达式、Action委托、Func 委托
(1)Lambda表达式:匿名方法的升级版,可以简化匿名方法的写法。写法 (形参列表)=>{ 表达式 OR 函数体 }
delegate string SayMessage(string msg); static void Main(string[] args) { SayMessage say = (Name) => { return string.Format("Hello {0}", Name); }; Console.WriteLine(say("Lambda")); Console.ReadKey(); } |
输出结果:"Hello Lambda"
通过看上面的代码,能否将定义的委托 SayMessage 也去掉吗?当然可以,用 Func委托 或者 Action委托 就可以取代它!