打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
如何创建C# Closure ?
 
 

JavaScript中一个重要的概念就是闭包,闭包在JavaScript中有大量的应用,但是你知道么?C#也可以创建Closure。下面就介绍一下如何在C#中创建神奇的闭包。

  在这之前,我们必须先知道如何在C#中定义函数

  //函数定义,参数为string,返回为string Func<string, string> myFunc = delegate(string msg) {       return "Msg:" + msg; };

利用Lambda表达式也可以简化上述的代码,但是效果一样:

  //Lambda Func<string, string> myFuncSame = msg => "Msg:" + msg;

定义好函数后,可以进行调用:

  //函数调用  string message= myFuncSame("Hello world");

定义一个带外部变量(相对于内嵌函数而言)的嵌套函数,外部函数将内部嵌套的函数进行返回:


public static Func<int, int> Func() {     var myVar = 1;     Func<int, int> inc = delegate(int var1)     {         //myVar能够记录上一次调用后的状态(值)         myVar = myVar + 1;         return var1 + myVar;     };     return inc; }

C# Closure调用如下所示:


static void CsharpClosures() {     var inc = Func();     Console.WriteLine(inc(5));//7     Console.WriteLine(inc(6));//9 }

当第二次调用inc(6)时,此时函数内变量myVar并未像第一次调用函数时进行重新初始化(var myVar=1),而是保留了第一次运算的值,即 2,因此inc(6)返回的结果为(2+1+6)=9.

 
 

以上动图由“图斗罗”提供

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
全网最通透的“闭包”认知 · 跨越语言
说说 Python 中的闭包
iOS开发Swift篇—(七)函数
2020 重学 Go 系列:09. 一篇文章理解 Go 里的函数
QTP中几个截取字符串的函数 - 风过无息 - 51Testing软件测试网 51Test...
详解 Rust 的函数与闭包
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服