由於多種原因,沒去找出處,下面僅是轉載
C#從1.1到2.0再到3.0 , 許多fans為它的新特性欣喜若狂, 其實大部分只是在做一些複古運動.
C#1.x 基本上抄襲了Java,
新加的特性:
Foreach: 很多語言早就有了這個關鍵字. 古老的Lisp裡用的是DoList 宏.
delegate: 模仿了Lisp的Funcall.
C#2.0:
Generics, 學過C++的人應該對模板都不陌生吧.雖然C#中做了少許改變.
Anonymous methods: 模仿Lisp 裡面的Lambda函數.
Nullable types: Lisp 裡面有(null )函數. 不管是atom 還是 list 都可以是nil.
aliases: 類似C裡面的 #define
再看C#3.0
Implicitly Typed Local Variables: 許多弱類型的語言已經這樣做了.
Lambda Expressions: 還是模仿了Lisp 裡面的Lambda函數. 比Anonymous Methods 更加像了.
Anonymous Types: 早就覺得寫Entity 太麻煩了, 我以前還寫過Code Generation 來產生實體類, Anonymous Types 可就簡單多了, Lisp 裡面的Macro做的就是Code Generation 的工作.
Query Expressions: 我以前做的O/R Mapping 跟它有些像. 增加的 from where select 等關鍵字, 好像是從COmega進化過來的. 這樣下去C#的關鍵字會越來越多, 語言變得越來越難學. 其中yield return 跟Lisp的Loop 方法如出一轍(loop... collecting..)
其實許多許多的特性, 在古老的Lisp語言中都已經存在了的. 現在把它翻出來, 稍微改變一下, 又變成新的了. 很大程度上,這種現象跟流行服飾是一樣. 實在沒什麼東西可創新了, 就複古吧!!!