首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

《C# 3.0 in a Nutshell》核心筆記:C# 3.0 與 .NET 3.5 架構全景

     編輯:關於C#

前言:C# 的設計哲學

C# 3.0 作為一門面向對象、類型安全、運行於 CLR 之上的語言,在保持簡單易學的同時,通過語法糖大幅提升表達力。本文基於《C# 3.0 in a Nutshell, 3rd Edition》梳理核心知識體系。

一、C# 面向對象三大支柱與獨特特性

  • 封裝/繼承/多態:與 Java 一致。
  • 統一類型系統:所有類型(值/引用)隱式繼承 System.Object,擁有 ToString()/Equals() 等方法。
  • 介面補足單繼承:類可實現多個介面,彌補單繼承限制。
  • 屬性/事件/方法:豐富組件開發能力(屬性封裝字段、事件實現觀察者模式)。

二、類型安全與 var 的本質

C# 為強類型語言:編譯期強制類型檢查,IntelliSense 提前發現錯誤。var 並非弱化類型系統——編譯器根據上下文推斷靜態類型,IL 中為具體類型,零運行時開銷。

三、記憶體管理:CLR 垃圾回收

  • 託管堆自動回收,理論上無內存洩漏。
  • 兩類回收線程:普通對象直接壓縮堆;昂貴資源(文件句柄、DB 連接)放入最終化佇列,安全點回收。
  • 最佳實踐:實現 IDisposable 及時釋放非託管資源(using 模式)。

四、跨平台與 CLR 關係

  • 符合 ECMA 標準,可跨 Windows/Linux/macOS(.NET Core/.NET 5+ 完全實現)。
  • Silverlight 等宿主模型復用 CLR 執行引擎。
  • C# 編譯為 IL + 元數據 → 打包為 Assembly (exe/dll) → CLR JIT 編譯為機器碼執行。

五、C# 3.0 十大新特性詳細目錄

特性關鍵字/語法核心價值
LINQfrom/select/where/orderby/group統一查詢語法,編譯期檢查,自動映射
Lambda 表達式=>匿名函數簡潔語法,支持表達式樹
擴展方法this 修飾首參數為現有類型(含 sealed/介面)注入實例方法
隱式類型變量var編譯期靜態類型推斷,簡化冗長泛型聲明
查詢理解語法from...selectLINQ 的聲明式查詢語法糖
匿名類型new { Prop = val }臨時數據結構,配合 var/LINQ 投影使用
對象初始化器new T { P1=v1, P2=v2 }聲明式初始化,消除構造函數爆炸
隱式類型數組new[] { ... }數組類型推斷,配合匿名類型數組
自動屬性public int X { get; set; }編譯器自動生成 backing field,減少樣板代碼
部分方法partial void M()代碼生成器預留擴展點,無實現則編譯移除
表達式樹Expression<T>將 Lambda 表示為數據結構,支撐 IQueryable 遠端轉譯

六、重點特性代碼速覽

自動屬性

// C# 3.0
public class Stock {
    public decimal Price { get; set; } // 編譯器生成私有字段
}

// C# 2.0 等價
public class Stock {
    private decimal _price;
    public decimal Price {
        get { return _price; }
        set { _price = value; }
    }
}

部分方法

partial class PaymentForm {
    partial void ValidatePayment(decimal amount); // 聲明(可無實現)
}

partial class PaymentForm {
    partial void ValidatePayment(decimal amount) { // 可選實現
        if (amount > 100) throw new Exception("超額");
    }
}

// 調用:無實現時編譯器移除調用點,零開銷
PaymentForm form = new PaymentForm();
form.ValidatePayment(5.3); // 安全調用

表達式樹


// 委托:可執行代碼
Func square = x => x * x;
Console.WriteLine(square(3)); // 9

// 表達式樹:數據結構(AST)
Expression> expr = x => x * x;
// 可運行時分析/修改/轉譯為 SQL
var body = expr.Body; // BinaryExpression: x * x

七、術語釐清:語法糖

上述所有新特性業內統稱「語法糖」——不擴展 CLR 能力,純編譯器層面轉換。這意味著:

  • 目標框架可為 .NET 2.0(僅需 C# 3.0 編譯器)。
  • IL 代碼與手寫展開形式等價,無性能懲罰。
  • 工具鏈(反編譯器、調試器)需識別還原原始語法。

後記

C# 3.0 以 LINQ 為核心,配套 9 項語言特性,完成了從命令式到聲明式/函數式混合範式的跨越。理解其「編譯期轉換」本質,有助於在遷移 .NET Core/.NET 5+ 時平滑升級代碼庫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved