Microsoft 想像的下一代網際網路:異構平台、多種語言開發的服務互聯互通,而非傳統靜態網頁。.NET 非傳統硬體/作業系統平台,而是一組協定集合,讓應用程式跨機器呼叫服務。
為支援此願景,Visual Studio 下一代需全新語言。Java 被移除、Visual J++ 停止更新,Microsoft 重金招攬 Anders Hejlsberg(Delphi 之父)主導開發 C#。
| 目標 | 現有語言缺口 | C# 解決方案 |
|---|---|---|
| 快速應用開發 (RAD) | C++ 複雜難調試、記憶體手動管理、版本相容問題;VB/Delphi 雖強但缺跨平台 | 垃圾回收、值/參考型別系統、介面獨立宣告、方法聲明定義合一、委派/事件、lock 同步、顯式 override |
| 跨平台部署 | VB/Delphi 僅限 Windows x86;Java 雖跨平台但犧牲平台特有功能 | 編譯為 IL,由 .NET Runtime 解釋執行,支援 Windows、CE、PDA、手機等裝置 |
| 存取平台原生資源 | Java 最小公分母原則,無法呼叫 Win32 API | .NET Runtime 允許 P/Invoke 呼叫原生 API,可視平台能力啟用/降級功能 |
| 支援 COM 與 .NET | C++/Delphi 需 IDL、類別工廠、繁瑣修飾;VB 隱藏複雜性但犧牲功能(不支援多介面、聚合) | 屬性 導向程式設計:編譯期中繼資料自動產生 COM Interop、Web Service、序列化等管道 |
自動回收無參考物件。unsafe 區塊可局部關閉 GC,滿足即時效能需求。
enum、struct → 指派/比較為值語意class、interface、delegate → 指派/比較為參考語意消除 C/C++ 指標模型複雜度與記憶體錯誤。
類別可實作多介面、介面可繼承多介面、類別單一繼承、介面不可繼承類別。避免 C++ 多重繼承鑽石問題,無需虛擬繼承機制。
單一檔案包含完整實作,無需 Header/Implementation 分離,編譯器自動解析模組依賴,無 #include/uses。
lock (syncObject) { /* critical section */ } // 等同 Java synchronized
隱藏 Mutex 細節,降低多執行緒錯誤風險。
public override void Method() { } // 必須標記
public new void Method() { } // 故意隱藏基類方法,抑制警告
保護方法名稱空間,偵測非預期命名衝突。
屬性本質是繼承自 System.Attribute 的類別,提供編譯期中繼資料:
[ComVisible(true)]、[Guid(...)] → 自動產生 COM Interop[WebMethod] → 類別/方法暴露為 SOAP Web Service| C++ 特性 | C# 替代方案 |
|---|---|
作用域解析運算子 :: | 統一使用 .(命名空間、成員、巢狀型別) |
成員存取運算子 -> | 值/參考型別系統下統一用 . |
參考參數語法 int& | ref (in/out)、out (out)、params (可變參數) |
| 樣板 | 無泛型(C# 1.0),所有類別繼承 object,集合僅能存 object 需向下轉型 |
註:C# 2.0 引入泛型完美解決此問題。
「C# 與 C++ 的實際差異遠大於名稱暗示的差異。若需針對 .NET 開發,強烈建議學習 C#;過渡期先學 Java 或 Delphi,不僅利於理解 C#,本身也是優秀工具。」
專業人員應善用最佳工具。C# 不是「改良版 C++」,而是為 .NET 量身打造的現代語言。