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

C# 3.0 匿名類型初體驗:從創建到 IL 反編譯深度剖析

     編輯:關於C語言

環境準備與第一個匿名類型

需安裝 Visual Studio 2005 + LINQ Preview。創建 LINQ Console 應用:


var p1 = new { Name = "A", Price = 3 };
Console.WriteLine($"Name = {p1.Name}\nPrice = {p1.Price}");
// 輸出:Name = A, Price = 3

編譯器幕後工作四步驟

  1. 解析對象初始化器屬性(Name、Price)
  2. 創建內部類型(如 <Projection>f__0)
  3. 生成私有字段、公共屬性、Get/Set 方法
  4. 實例化並賦值

ILDASM 反編譯實證

生成的類型結構


.class nested private auto ansi sealed '<>f__0'
    extends [mscorlib]System.Object
{
    .field private string '_Name'
    .field private int32 '_Price'
    .property instance string 'Name' { .get ... .set ... }
    .property instance int32 'Price' { .get ... .set ... }
}

屬性 IL 細節


.property instance string Name()
{
    .get instance string AnonTypes.Program/'<>f__0'::get_Name()
    .set instance void AnonTypes.Program/'<>f__0'::set_Name(string)
}

類型名包含特殊字符(<>),源碼無法直接引用,保證「源碼層面匿名」。

命令行編譯替代方案


C:\Program Files\LINQ Preview\Bin\csc.exe
/reference:System.Data.DLinq.dll /reference:System.Query.dll
/out:AnonTypes.exe Program.cs

總結

匿名類型是編譯期類型合成:源碼聲明屬性名/值,編譯器生成完整類型、字段、屬性、方法。運行期為具體類型實例,支持強類型訪問、智能提示、值語義相等。理解其編譯器生成機制,有助於正確跨方法邊界傳遞(泛型推斷/映射 DTO)並避免濫用。

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