当前位置: 首页 > news >正文

邯郸建设网站的公司哪家好google网站设计原则

邯郸建设网站的公司哪家好,google网站设计原则,巩义网站建设方案书,四川网站建设培训学校通常来讲#xff0c;大家一听到闭包#xff0c;应该首先会想到JavaScript中的闭包#xff0c;而不会想到C#中的闭包#xff0c;但是C#中也是有闭包的#xff0c;下面就让我来为大家仔细讲解讲解。 在C#中#xff0c;我们通常知道变量作用域有三种#xff1a;1、是属于类…通常来讲大家一听到闭包应该首先会想到JavaScript中的闭包而不会想到C#中的闭包但是C#中也是有闭包的下面就让我来为大家仔细讲解讲解。 在C#中我们通常知道变量作用域有三种1、是属于类的我们常称之为field2、是属于函数的我们通常称之为局部变量3、其实也是属于函数的不过它的作用范围更小它只属于函数局部的代码片段这种我们同样称之为局部变量。 这三种变量的生命周期都属于它所寄存的对象变量是随着寄存对象的销毁而消亡。 三种作用域可以这样理解类中的变量是随着类实例化而产生同时伴随着类对象资源回收而消亡类中的static和const对象除外函数的变量随着函数的调用开始而产生伴随着函数执行结束而结束函数内部的变量生命周期满足先进后出的特点 闭包是使用的变量已经脱离其作用域由于变量和作用域之间存在上下文关系从而可以在当前环境中继续使用即上下文环境所定义的一种函数对象。 C#中闭包允许你将一些行为进行封装将这个封装的行为当成对象进行传递但是它能够访问到最初声明时的上下文。 首先我们看一个最简单的javascript中经常见到的关于闭包的例子: function f1(){var n999;return function(){alert(n); // 999return n;} }var a f1();alert(a()); 将上面的Java Script代码翻译成C#代码如下 public class TCloser{public Funcint T1(){var n 999;return () {Console.WriteLine(n);return n;};}}class Program{static void Main(){var a new TCloser();var b a.T1();Console.WriteLine(b());}} 从上面的代码可以看出变量n是属于函数T1的局部变量n的生命周期应该是伴随着函数T1的调用结束而结束但却在返回的委托b中仍能够调用这正是C#闭包所展示出的威力其实闭包就相当于委托。 当T1调用返回的匿名委托时编译器会判断这是合法的返回的委托b和函数T1存在上下文关系匿名委托是允许使用它所在的函数或类中的局部变量从而编译器通过一系列动作使调用的函数T1的局部变量自动闭合该局部变量满足新的作用范围。 讨论一下C#中的闭包 1、静态全局字段 using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace ConsoleApplication3 {class Program{public static int copy;//[0]这个不是闭包static void Main(){//定义动作组ListAction actions new ListAction();for (int counter 0; counter 10; counter){copy counter;actions.Add(() Console.WriteLine(copy));}//执行动作foreach (Action action in actions) action();}} }//注:Action定义如下: //public delegate void Action();2、局部变量(闭包一) using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace ConsoleApplication3 {class Program{static void Main(){int copy;//[1]闭包一//定义动作组ListAction actions new ListAction();for (int counter 0; counter 10; counter){copy counter;actions.Add(() Console.WriteLine(copy));}//执行动作foreach (Action action in actions) action();}} }//注:Action定义如下: //public delegate void Action();3、局部变量(闭包二) using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace ConsoleApplication3 {class Program{static void Main(){//定义动作组ListAction actions new ListAction();for (int counter 0; counter 10; counter){int copy;//[1]闭包二copy counter;//int copy counter;//换种写法actions.Add(() Console.WriteLine(copy));}//执行动作foreach (Action action in actions) action();}} }//注:Action定义如下: //public delegate void Action();4、局部变量(闭包三) using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace ConsoleApplication3 {class Program{static void Main(){//定义动作组ListAction actions new ListAction();for (int counter 0; counter 10; counter)//[3]闭包三{actions.Add(() Console.WriteLine(counter));}//执行动作foreach (Action action in actions) action();}} }//注:Action定义如下: //public delegate void Action();1:输出什么? 2:输出什么? 3:输出什么? 4:输出什么? 这几个例子可以将匿名函数进行转换这样可以看的更清楚。 在1中“外部变量”copy是类的一个静态成员因此可以讲匿名函数转换为以下形式 class Program{public static int copy;//[0]这个不是闭包static void TempMethod(){Console.WriteLine(copy);}static void Main(){//定义动作组ListAction actions new ListAction();for (int counter 0; counter 10; counter){copy counter;actions.Add(new Action(TempMethod));}//执行动作foreach (Action action in actions) action();}}2和3中“外部变量”copy是Main方法中的局部变量局部变量的生存期现在必须至少延长为匿名函数委托的生存期。这可以通过将局部变量“提升”到编译器生成的类的字段来实现。 之后局部变量的实例化对应于为编译器生成的类创建实例而访问局部变量则对应于访问编译器生成的类的实例中的字段。而且匿名函数将会成为编译器生成类的实例方法 class Program{static void Main(){//定义动作组TempClass tc new TempClass();//定义动作组ListAction actions new ListAction();for (int counter 0; counter 10; counter){tc.copy counter;actions.Add(tc.TempMethod);}//执行动作foreach (Action action in actions) action();}class TempClass{public int copy;public void TempMethod(){Console.WriteLine(copy);}}}class Program{static void Main(){//定义动作组//定义动作组ListAction actions new ListAction();for (int counter 0; counter 10; counter){TempClass tc new TempClass();tc.copy counter;actions.Add(tc.TempMethod);}//执行动作foreach (Action action in actions) action();}class TempClass{public int copy;public void TempMethod(){Console.WriteLine(copy);}}}4中的“外部变量”counter是for循环的循环因子因此可以转换为以下形式 class Program{static void Main(){//定义动作组ListAction actions new ListAction();TempClass tc new TempClass();for (tc.copy 0; tc.copy 10; tc.copy){actions.Add(new Action(tc.TempMethod));}//执行动作foreach (Action action in actions) action();}class TempClass{public int copy;public void TempMethod(){Console.WriteLine(copy);}}}闭包就先讲解这么多下次在更加深入的讲解欢迎各位宝宝们留言。
http://www.zqtcl.cn/news/894985/

相关文章:

  • 网站建设数据库类型百度seo现状
  • 德州网站优化公司平面设计公司企业logo设计
  • 山东平台网站建设价位网站广告文案
  • 可以做哪方面的网站万网董事长是谁
  • 京东网站开发费用程序员找工作的网站
  • 怎么做网站首页psdwordpress 注册验证
  • 商丘做网站的公司有哪些郑州网站公司排名
  • 竞价网站与竞价网站之间做友情链接企业邮箱查询
  • 国外jquery网站wordpress 下一页 模板
  • 安卓手机做网站云南建设厅网站职称评定
  • 国外域名注册商网站邮箱登陆登录入口
  • 男女做那个的网站是什么深圳市8号公告
  • 做网站收款支付宝接口廊坊市网站建设公司
  • 文档下载网站 建设做cpa用什么网站
  • 网站制作合同注意事项百度网页版电脑版
  • 怎样做模板网站手机营销型网站制作
  • 如何采集网站内容如何做网站导航栏的搜索引擎优化
  • 网站关键词排名外包织梦大气婚纱影楼网站源码
  • 网站建设执行力冠县哪里有做网站的
  • 免费网站推广咱们做网络营销推广的应用场景
  • 深圳正规网站制作哪家公司好做网站代理属于开设赌场罪吗
  • 江西宜春市建设局网站wordpress博客下载器
  • 汕头站扩建效果图微信怎么引流营销呢
  • 小学学校网站建设计划wordpress博客示例
  • 德邦公司网站建设特点万网是什么
  • 天津武清网站开发广东省建筑网站
  • 青岛做外贸网站哪家好佛山网站建设哪家好
  • 网站关键词设置技巧wordpress 获得参数
  • 程序网站开发搜索引擎有哪些技巧
  • 网站模板上传教程响应式网站建设免费