終於靜下心來仔細聽了一遍Anders Hejlsberg(Visual Studio組的TECHNICAL FELLOW,C#的設計者之 一)在PDC08上講的“The Future of C#”(http://channel9.msdn.com/pdc2008/TL16/)。
回顧C#發展的歷史,C#1.0完全是模仿Java,並保留了C/C++的一些特性如struct,新學者很容易上手 ;C#2.0加入了泛型,也與Java1.5的泛型如出一轍;C#3.0加入了一堆語法糖,並在沒有修改CLR的情況下 引入了Linq,簡直是神來之筆,雖然很多項目出於各種各樣如性能之類的原因沒有采用,但非常適合小型 程序的快速開發,減輕了程序員的工作量,也提高了代碼的可讀性;C#4.0增加了動態語言的特性,從裡 面可以看到很多Javascript、Python這些動態語言的影子。雖然越來越偏離靜態語言的道路,但從另一個 角度來說,這些特性也都是為了提高程序員的生產力。至於被接受與否,還是讓時間來說話吧。
PS:這裡面還有一點版本號的小插曲——VS2008所對應的.Net Framework是3.5,C#是3.0,CLR是2.0 ,及其混亂,MS終於下決心在VS2010中把這三個版本號都統一成了4.0,於是CLR3不知所終……
Dynamically Typed Object
C#4.0加入了dynamic關鍵字,可以申明一個變量的static類型為dynamic(有點繞口)。
在3.0及之前,如果你不知道一個變量的類型,而要去調用它的一個方法,一般會用到反射:
object calc = GetCalculator();
Type calcType = calc.GetType();
object res = calcType.InvokeMember("Add",
BindingFlags.InvokeMethod, null,
new object[] { 10, 20 });
int sum = Convert.ToInt32(res);
有了dynamic,就可以把上面代碼簡化為:
dynamic calc = GetCalculator();
int sum = calc.Add(10, 20);