c#3.0系列:Anonymous Type In CLR(3.5)

來源:互聯網
上載者:User

我們說Anonymous Type是C# 3.0的新的特性,而沒有說Anonymous Type 是.NET Framework 3.5的新特性。這是因為Anonymous Type僅僅是.NET Programming Language和相應的Compiler的新引入的特徵。而對於.NET Framework 3.5來說,它看不到這和原來有什麼不同,對於Anonymous Type和一 般的Named Type,對於CLR來說他們之間沒有什麼本質的區別。

通過下面這樣的一段簡單的代碼:

1var p1 = new { Name = "IORI", Age = 27 };

然後我們再看看IL:

Code

1.method private hidebysig static void Main(string[] args) cil managed
2{
3 .entrypoint
4 // Code size    15 (0xf)
5 .maxstack 3
6 .locals init ([0] class '<>f__AnonymousType0`2'<string,int32> p1)
7 IL_0000: nop
8 IL_0001: ldstr   "IORI"
9 IL_0006: ldc.i4.s  27
10 IL_0008: newobj   instance void class '<>f__AnonymousType0`2'<string,int32>::.ctor(!0,
11                                             !1)
12 IL_000d: stloc.0
13 IL_000e: ret
14} // end of method Program::Main
15

我們再這裡就可以看出Compiler將會為p1這個Anonymous Type建立一個名為 <>f__AnonymousType0`2<string,int32>的類型。參數將根據資料 成員的具體結構,這裡也是聲明一個類型。這個類繼承自object,並且重寫了 ToString() 和 GetHashCode()的實現。所有的匿名型別自動繼承自 System.Object ,並且重寫了Equals(), GetHashCode(), and ToString(). 如 下圖:

結構如下:

internal sealed class <>f__AnonymousType0<<Name>j__TPar, <Age>j__TPar>
{
  // Fields
private readonly <Age>j__TPar <Age>i__Field;
    private readonly <Name>j__TPar <Name>i__Field;

   // Methods
public <>f__AnonymousType0 (<Name>j__TPar Name, <Age>j__TPar Age);

   public override bool Equals(object value);
    public override int GetHashCode();
    public override string ToString();

  // Properties
  public <Age>j__TPar Age { get; }
  public <Name>j__TPar Name { get; }
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.