关闭

写给那些看不懂委托的同学

发表于:2013-3-01 09:41

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Rising_Sun    来源:51Testing软件测试网采编

  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委托 就可以取代它!

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号