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

Visual C# 3.0 新特性全景速覽:從 var 到表達式樹

     編輯:關於C#

背景:PDC 預覽版搶先看

隨 VS 2005/C# 2.0 發布,微軟在 PDC 釋出 C# 3.0 預覽版,引入七大核心特性。雖未標準化,但已展現語言演進方向。本文系統梳理全部特性與代碼示例。

七大核心特性清單

  1. 隱式類型區域變量 (var)
  2. 匿名類型
  3. 擴展方法
  4. 對象/集合初始化器
  5. Lambda 表達式
  6. 查詢表達式 (LINQ)
  7. 表達式樹

1. 隱式類型區域變量 (var)

核心規則:編譯期根據初始化表達式靜態推斷類型,強類型不可變。

var i = 1;           // int
var arr = new[] {1,2,3,4}; // int[]
// 必須同行初始化,不可為 null
// var x; // 錯誤
// var y = null; // 錯誤

關鍵作用:使匿名類型實例可賦值給強類型變量,無需預定義類型。

2. 匿名類型

內聯定義唯讀屬性結構,編譯器自動生成類型(同結構共享類型):

var frankenstein = new { hair="black", skin="green", teethCount=64 };
// 編譯器生成類似:
class __Anonymous1 {
    public string hair { get; set; }
    public string skin { get; set; }
    public int teethCount { get; set; }
}
// 同結構實例可互換
var a = new { X=1, Y=2 };
var b = new { X=3, Y=4 };
a = b; // 合法

3. 擴展方法

定義於 static 類,首參數加 this,經 using 引入後如實例方法調用:

public static class StringExtensions {
    public static int ToInt32(this string s) => Convert.ToInt32(s);
}

// 使用
using MyExtensions;
string s = "123";
int i = s.ToInt32(); // 編譯為 StringExtensions.ToInt32(s)
// 優先級低於實例方法

4. 對象與集合初始化器

聲明式初始化,等價於無參構造 + 屬性賦值:

// 對象
var coord = new CoOrdinate { x = 0, y = 0 }; // 無需構造函數

// 集合
List animals = new List { "monkey", "donkey", "cow" };
// 等價於 Add 多次調用

5. Lambda 表達式:匿名方法的「濃縮咖啡」

語法:參數 => 表達式/語句塊。超越匿名方法:

  • 參數類型可推斷(匿名方法需顯式聲明)。
  • 可轉換為表達式樹(Expression<T>),支撐遠端查詢轉譯。
  • 語法更函數式、簡潔。
// 委托調用演進
// C# 1.x: 命名方法
delegate void D(); D d = SayHi; d();

// C# 2.0: 匿名方法
D d = delegate() { Console.WriteLine("Hi"); }; d();

// C# 3.0: Lambda
D d = () => Console.WriteLine("Hi"); d();

// 帶參數/返回值
Func sq = x => x * x; // 表達式體
Func add = (a, b) => { return a + b; }; // 語句體

6. 查詢表達式 (LINQ)

SQL 風格語法糖,編譯為方法鏈 + Lambda:

var filtered = from c in coords
               where c.x == 1
               select new { c.x, c.y };

// 編譯器轉換為:
var filtered = coords.Where(c => c.x == 1)
                     .Select(c => new { c.x, c.y });

綜合運用:匿名類型(投影)、擴展方法(Where/Select)、var(結果類型)、Lambda(謂詞)。

7. 表達式樹

Expression<T> 將 Lambda 表示為運行時可檢查/修改的 AST:

Expression expr = () => Console.WriteLine("Hi");
// 運行時分析樹結構
Console.WriteLine(expr.NodeType); // ExpressionType.Lambda
// 支撐 IQueryable: LINQ to SQL 將表達式樹轉譯為 SQL

總結

C# 3.0 七大特性環環相扣:var/匿名類型解決中間類型聲明;初始化器簡化構建;擴展方法為 IEnumerable<T> 注入算子;Lambda 提供內聯邏輯;查詢表達式統一語法;表達式樹支撐遠端執行。這套組合拳奠定了現代 C# 生態(Entity Framework、Rx、ASP.NET Core 等)的基石。

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