探索C#之函数创建和闭包

发表于:2015-3-05 09:55

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

 作者:蘑菇先生    来源:51Testing软件测试网采编

  阅读目录:
  动态创建函数
  匿名函数不足之处
  理解c#中的闭包
  闭包的优点
  动态创建函数
  大多数同学,都或多或少的使用过。回顾下c#中动态创建函数的进化:
  C# 1.0中:
  public delegate string DynamicFunction(string name);
  public static DynamicFunction GetDynamicFunction()
  {
  return GetName;
  }
  static string GetName(string name)
  {
  return name;
  }
  var result = GetDynamicFunction()("mushroom");
  3.0写惯了是不是看起来很繁琐、落后。 刚学委托时,都把委托理解成函数指针,也来看下用函数指针实现的:
  char GetName(char p);
  typedef char (*DynamicFunction)(char p);
  DynamicFunction GetDynamicFunction()
  {
  return GetName;
  }
  char GetName(char p)
  {
  return p;
  };
  char result = GetDynamicFunction()('m');
  对比起来和c# 1.0几乎一模一样了(引用/指针差别),毕竟是同一家族的。
  C# 2.0中,增加匿名函数:
  public delegate string DynamicFunction(string name);
  DynamicFunction result2 = delegate(string name)
  {
  return name;
  };
  C# 3.0中,增加Lambda表达式,华丽的转身:
  public static Func<string, string> GetDynamicFunction()
  {
  return name => name;
  }
  var result = GetDynamicFunction()("mushroom");
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号