天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

C#與閉包

  首先想說明一點,雖然有這樣那樣的不好的心態(比如中文技術書),但總體來說,國內的技術人員還是喜歡分享和教導別人的,這點我的個人感受和之前在園子里看到的朋友的感受恰恰相反。個人認為其實國內很多技術網友都是很熱心的,可能因為語言問題同一個技術熱點會稍稍落后國外一些,但一些成熟的或者基礎的概念都可以找到很細致的中文介紹,特別是關于閉包。因為它的字面解釋確實很繞,所以基本所有試圖解釋這一名詞的同學都是盡量用自己認為最通俗易懂的方式來進行講解。閑話扯遠了,這里我就用C#語言來給大家解釋下閉包吧。

  其實要提到閉包,我們還得先提下變量作用域和變量的生命周期。

  在C#里面,變量作用域有三種,一種是屬于類的,我們常稱之為field;第二種則屬于函數的,我們通常稱之為局部變量;還有一種,其實也是屬于函數的,不過它的作用范圍更小,它只屬于函數局部的代碼片段,這種同樣稱之為局部變量。這三種變量的生命周期基本都可以用一句話來說明,每個變量都屬于它所寄存的對象,即變量隨著其寄存對象生而生和消亡。對應三種作用域我們可以這樣說,類里面的變量是隨著類的實例化而生,同時伴隨著類對象的資源回收而消亡(當然這里不包括非實例化的static和const對象)。而函數(或代碼片段)的變量也隨著函數(或代碼片段)調用開始而生,伴隨函數(或代碼片段)調用結束而自動由GC釋放,它內部變量生命周期滿足先進后出的特性。

  那么這里有沒有例外呢?

  答案是有的,不過在提這點之前,我還需要給各位另外一個名詞。都說C#就是MS版本的Java,這話在.NET 1.0可能可以這么說,但自2.0之后C#就可以自豪的說它絕非Java了,這里面委托有很大的功勞。如果用過Java和C#的人并且嘗試過寫WinForm程序時全部手寫實現代碼的人就會有這樣一個感受,同樣的click事件,在Java中必須要無端的套個匿名類,但在c#中,你是可以直接將函數名+=到事件之后而不需要顯示寫上匿名委托的對象類型的。因為編譯器會幫你做這部分工作,在3.0和以后的版本之中,微軟將委托的用法更是發揮的淋漓精致,無論是簡潔的Lamda還是通俗易懂的LINQ,都是源自委托的。

  你可能要問,委托和我們今天要講的閉包又有什么關系呢?

  我們知道,C#, JavaJavaScript, Ruby, Python這些語言不同,在C#和Java的世界里面,原子對象就是類(當然還有struct和基本變量),而不是很多動態語言中的函數,我們可以實例化一個類,實例化一個變量,但不可以直接new 一個函數。也就是表面上看,我們是沒辦法像js那樣將函數進行實例化和傳遞的。這也是為什么直到Java 7閉包才被姍姍來遲的加入Java特性中。但對C#來說這些只是表象,我剛學C#的時候,看到最多的解釋委托的話就是:委托啊,就相當于C++里面的函數指針啦。這句話雖然籠統,但確實有一定道理,通過委托特別是匿名委托這層對象的包裝,我們就可以突破無法將函數當做對象傳遞的限制了。

  好像這里還是沒講到閉包和委托的關系,好吧,我太啰嗦了,下面從概念開始講。

  閉包其實就是使用的變量已經脫離其作用域,卻由于和作用域存在上下文關系,從而可以在當前環境中繼續使用其上文環境中所定義的一種函數對象。

  好拗口,程序員,還是用示例來說明更好理解。

  首先來個最簡單的JavaScript中常常見到的關于閉包的例子:

function f1(){
  var n = 999;
  return function(){
    alert(n); // 999
return n;
  }
}
var a = f1();
alert(a());

NET技術C#與閉包,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产成人免费片在线视频观看 | 成人无码精品一区二区在线观看 | 暖暖日本手机免费完整版在线观看 | 日本强好片久久久久久AAA | 午夜影视不充值观看 | 亚州天堂在线视频av | 国产欧美一区二区三区免费 | 色戒在线完整观看在线播放版 | JLZZJLZZJLZ老师好多的水 jk制服喷水 | a久久99精品久久久久久蜜芽 | 自慰弄湿白丝袜 | 亚洲国产精品线在线观看 | 亚洲成色爱我久久 | 性XXXXX搡XXXXX搡景甜 | 大中国免费视频大全在线观看 | 青青草原网址 | 国内精品久久久久影院亚洲 | 在教室轮流被澡高H林萌 | 99热久久久无码国产精品性麻豆 | 少妇一夜未归暴露妓女身份 | 亚洲日本欧美国产在线视 | 久久亚洲伊人中字综合精品 | 国产亚洲精品第一区香蕉 | 性色AV一区二区三区咪爱四虎 | 丝袜诱惑qvod| 阿离被扒开双腿疯狂输出 | 在线亚洲专区中文字幕 | 热の中文 AV天堂 | 7723日本高清完整版在线观看 | 久久国产av偷拍在线 | 色吧电影院| 亚洲日韩乱码人人爽人人澡人 | 被肉日常np高h | 99综合之综合久久伊人 | 91成品视频 | 成人午夜精品久久久久久久秋霞 | 亚洲精品无码午夜福利在线观看 | 欧美另类老少配hd | 美女PK精子小游戏 | 亚洲蜜芽在线观看精品一区 | 国产成人在线播放视频 |