【IT168 新手入門】C#中C#(發音為“See Sharp”)是簡單、現代、物件導向和型別安全的程式設計語言。C#起源於C語言家族,因此,C,C++和Java的程式員很快就能熟悉它。C#已經獲得了ECMA International和ISO/IEC的國際標準認證,它們分別是ECMA-334標準和ISO/IEC 23270標準。Microsoft用於.NET架構的C#編譯器就是根據這兩個標準實現的。
C#是物件導向的語言,但C#進一步支援面向組件(component-oriented)的編程。現代軟體設計越來越依賴於自包含(self-contained)和自描述(self-describing)功能包形式的軟體組件。這種組件的關鍵之處在於它們提供了帶有屬性、方法和事件的編程模型;它們還具有提供關於組件聲明資訊的特性(attribute);同時,它們編入了自己的文檔。C#提供語言構件來直接支援這些概念,使得C#在建立和使用軟體構件方面非常自然。
C#的一些特徵支援建立健壯和持久的應用程式:記憶體回收(garbage collection)特徵可以自動回收無用對象所佔的記憶體空間;異常處理(exceptionhandling)提供了一個結構化和可擴充的方式,用於錯誤偵測和恢複;語言的型別安全(type-safe)設計了防止引用非初始設定變數、數組下標越界,以及執行未檢查的類型轉換等情形的發生。
C#具有統一類型系統。所有的C#類型,包括諸如int和double的基礎資料型別 (Elementary Data Type),都繼承於單個根類型object。因此,所有類型都共用一組通用操作,並且,任何類型的值都能夠以一致的方式儲存、傳遞和操作。C#支援使用者自訂參考型別和實值型別,既允許對象的動態分配,也允許輕量結構的內聯儲存。
為了保證C#程式和類庫總能以相容的方式升級,在C#的設計中十分強調版本控制。許多程式語言不太重視這一點,導致採用那些語言編寫的程式常常因為其所依賴的類庫的更新而無法工作。C#的設計方面直接受到版本考慮的影響,包括分開的virtual和override修飾符、方法重載的規則,以及支援對顯式介面成員的聲明。
本章的其他部分將描述C#語言的本質特徵。儘管後面的章節將更為詳細,有時甚至是細緻入微地描述這些規則和異常,但是本章力求對整個C#做一個簡單明了的說明。其意圖是向讀者提供對語言的入門介紹,以便於讀者上手編寫程式和閱讀後面的章節。
學習某種程式設計語言,通常採用“Hello,World”程式作為起步。下面是C#版的:
using System; class Hello { static void Main(){ Console.WriteLine("Hello,World"); } } |
C#來源程式檔案一般用.cs作為副檔名。假定“Hello,World”來源程式檔案被存為hello.cs,那麼,使用下面的命令列就能通過Microsoft C#編譯器編譯這個程式:
csc hello.cs
它將產生一個名為hello.exe的可執行程式集。當程式運行時,輸出結果如下:
Hello,World
“Hello,World”程式開頭是using指令,引用了System命名空間(namespace)。命名空間提供了C#程式和類庫分層次的組織手段。命名空間包含類型和其他命名空間,例如,System命名空間包含若干類型(如程式中引用的Console類),以及若干其他命名空間(如IO和Collections)。如果通過using指令引用給定命名空間,就可以對命名空間的成員進行非限定的使用。正是由於程式中使用了using指令,才能夠將System.Console.WriteLine簡寫為Console.WriteLine。
“Hello,World”程式中聲明的Hello類只有一個成員,即名為Main的方法。Main方法是用static修飾符聲明的。靜態方法不同於執行個體方法,後者需要使用關鍵字this來引用特定的對象執行個體,而靜態方法的操作不需要引用特定的對象。作為約定,被命名為Main的靜態方法充當程式的進入點。
程式輸出是由System命名空間下Console類的WriteLine方法產生的。這個類是由.NET架構類庫提供的,預設情況下,類庫被Microsoft C#編譯器自動引用。注意C#本身沒有單獨的運行時類庫。事實上,.NET架構是C#的運行時類庫。