Visual C# 隨.NET的開(kāi)發(fā)工具Visual Studio一起推出,有如下幾個(gè)版本:
1.0——隨Visual Studio .NET(2002)于2002年2月13日發(fā)布。
1.5——隨Visual Studio .NET 2003于2003年5月20日發(fā)布。
2.0——隨Visual Studio 2005于2005年11月7日發(fā)布。
3.0——隨Visual Studio 2008于2007年11月16日發(fā)布。
4.0——將隨Visual Studio 2010于2010年3月發(fā)布。
3.0版的規(guī)范見(jiàn)Visual Studio 2008安裝目錄中的Word文檔:“C:/Program Files/Microsoft Visual Studio 9.0/VC#/Specifications/2052/CSharp Language Specification.doc”。
下面羅列Visual C# 的各個(gè)主要版本的新增的特點(diǎn)和功能。
1)C# 1.0——與C和C++比較,C# 在許多方面有所限制和增強(qiáng),包括:
指針——C# 是真正支持指針,但是其指針只能在非安全作用域中使用,而只有具有適當(dāng)權(quán)限的程序,才可以執(zhí)行標(biāo)記為非安全的代碼。絕大多數(shù)對(duì)象的訪問(wèn)是通過(guò)安全的引用(references)來(lái)進(jìn)行的,而引用是不會(huì)造成無(wú)效的,而且大多數(shù)算法都是要進(jìn)行溢出檢查的。一個(gè)非安全指針,不僅可以指向值類型,還可以指向子類和System.Object。也可以使用指針(System.IntPtr)來(lái)編寫安全代碼。
托管(managed受控)——在C# 中,托管內(nèi)存不能顯式釋放,取而代之的是(當(dāng)再?zèng)]有內(nèi)存的引用存在時(shí)的)垃圾收集。但是,引用非托管資源的對(duì)象,例如HBRUSH,是可以通過(guò)標(biāo)準(zhǔn)的IDisposable接口的指示來(lái)釋放指定內(nèi)存的。
多重繼承——在C# 中多重繼承被禁止(盡管一個(gè)類可以實(shí)現(xiàn)任意數(shù)目的接口,這點(diǎn)似Java),這樣做的目的是為了避免復(fù)雜性和“依存地獄”,也是為了簡(jiǎn)化對(duì)CLI的結(jié)構(gòu)需求。
轉(zhuǎn)換——C# 比C++更類型安全,唯一的默認(rèn)隱式轉(zhuǎn)換也是安全轉(zhuǎn)換,例如加寬整數(shù)和從一個(gè)派生類型轉(zhuǎn)換到一個(gè)基類(這是在JIT編譯期間間接強(qiáng)制進(jìn)行的)。在布爾和整數(shù)之間、枚舉和整數(shù)之間都不存在隱式轉(zhuǎn)換,而且任何用戶定義的隱式轉(zhuǎn)換,都必須顯式地標(biāo)出。
數(shù)組聲明——和C/C++的數(shù)組聲明的語(yǔ)法不同,C# 中用“int[] a = new int[5];”代替了C/C++的“int a[5];”。
枚舉——C# 中的枚舉被放入它們自己的命名空間。
特性——可在C# 中可以使用特性(properties,屬性集),訪問(wèn)類似于C++中成員域,與VB相似。
類型反射與發(fā)現(xiàn)——在C# 中可以使用完整的類型反射與發(fā)現(xiàn),這些都會(huì)用到元數(shù)據(jù)所提供的信息。
模板——為了簡(jiǎn)單性,C# 1.0中不支持模板等泛型編程技術(shù)。
2)C# 1.5版的新增功能——/** */ 文檔注釋符、#line hidden預(yù)處理指令、/nowarn和/nostdlib編譯指令、Web窗體、XML Web服務(wù)、ADO.NET、可用Windows窗體和框架創(chuàng)建分布式應(yīng)用程序的表示層、可創(chuàng)建各種Windows和ASP.NET Web應(yīng)用程序和控件的項(xiàng)目模板、可使用非可視組件和相關(guān)功能,將消息隊(duì)列、事件日志和性能計(jì)時(shí)器等資源合并到應(yīng)用程序中、通過(guò)組件設(shè)計(jì)器和框架類為創(chuàng)建組件提供RAD支持。
3)C# 2.0的新特征:
部分類——一個(gè)類可分開(kāi)到多個(gè)文件中實(shí)現(xiàn)。
泛型——C# 從2.0起,開(kāi)始支持泛型或參數(shù)類型。C# 還支持一些C++模板不支持的特性,例如對(duì)泛型參數(shù)的類型約束。另一方面,C# 的表達(dá)式不能用作泛型參數(shù),而這在C++中卻是允許的。C# 的參數(shù)化的類型為虛擬機(jī)的首個(gè)類對(duì)象,允許優(yōu)化和保存類型信息,這一點(diǎn)與Java不同。
關(guān)鍵字yield——迭代器的一種新形式,可通過(guò)功能類型的關(guān)鍵字yield,來(lái)使用協(xié)同例程。
匿名委托——提供了閉包功能。
結(jié)合運(yùn)算符??——返回表中的第一個(gè)非空值,例如:
object nullObj = null;
object obj = new Object();
return nullObj ?? obj // returns obj;
可空值類型——可空值類型由問(wèn)號(hào)?來(lái)標(biāo)記(例如,int? i = null;),它可以改善與SQL數(shù)據(jù)庫(kù)的交互。
4)C# 3.0的新特征:
LINQ(Language Integrated Query,語(yǔ)言集成查詢)——"from, where, select"上下文敏感的關(guān)鍵字,允許在SQL、XML、集合等之間進(jìn)行查詢。
對(duì)象初始化——如Customer c = new Customer(); c.Name = "James"; 可被寫成Customer c = new Customer { Name="James" };。
集合初始化——如MyList list = new MyList(); list.Add(1); list.Add(2); 可被寫成MyList list = new MyList { 1, 2 };。
匿名類型——如var x = new { Name = "James" };。
局部變量類型推論——如var x = "hello";等價(jià)于string x = "hello"; 該特性在匿名類型變量的聲明中需要。
隱含類型的數(shù)組——數(shù)組的類型現(xiàn)在可以省略,所以int[] arr = new int[] { 1, 2, 3 }; 現(xiàn)在可以寫成var arr = new[] { 1, 2, 3 };。
λ表達(dá)式——如listOfFoo.Where(delegate(Foo x) { return x.Size > 10; }) 可被寫成 listOfFoo.Where(x => x.Size > 10);。
編譯器推斷——翻譯λ表達(dá)式到強(qiáng)類型函數(shù)或強(qiáng)類型表達(dá)式樹(shù)。
自動(dòng)屬性——編譯器會(huì)自動(dòng)生成一個(gè)私有實(shí)例變量,而且給出適當(dāng)?shù)墨@取器和設(shè)置器代碼,例如public string Name { get; private set; };。
擴(kuò)展方法——通過(guò)在另一個(gè)靜態(tài)類的一個(gè)方法的首個(gè)參數(shù)中包含this關(guān)鍵字,來(lái)將方法添加到類中。如
public static class IntExtensions {
public static void PrintPlusOne(this int x) {
Console.WriteLine(x + 1);
}
}
int foo = 0;
foo.PrintPlusOne();
部分方法——允許代碼Generator生成方法的聲明作為擴(kuò)展點(diǎn),如果有人在另一個(gè)部分類中實(shí)際實(shí)現(xiàn)它,則其只被包含在源代碼編譯中。
5)4.0版準(zhǔn)備增加的新特性主要有:
動(dòng)態(tài)支持——通過(guò)引進(jìn)新類型dynamic來(lái)提供對(duì)動(dòng)態(tài)類型延遲綁定的支持。
Office可編程性——通過(guò)添加命名和可選的參數(shù)、dynamic類型、索引屬性和可選的ref修飾符,大大增強(qiáng)了訪問(wèn)(包括Office自動(dòng)化API在內(nèi)的)COM接口的能力。
類型等價(jià)支持——可配置應(yīng)用程序的內(nèi)置類型信息,以代替從PIA(Primary Interop Assembly,主互操作程序集)導(dǎo)入的類型信息。
協(xié)變與逆變——協(xié)變(covariance)是你能夠使用更多的派生類型而不是由泛型參數(shù)指定,而協(xié)變(contravariance)則讓你使用更少的派生類型。
新聞熱點(diǎn)
疑難解答
圖片精選