程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#超級實用的一種類型—匿名類型

C#超級實用的一種類型—匿名類型

編輯:C#入門知識

C#超級實用的一種類型—匿名類型


顧名思義 匿名類型就是沒有名字的類型。當一個新的匿名對象定義與前面已經存在的類型定義的內部變量類型相同時,編譯器就會只生成一個類定義,而不是各一個。匿名類型對象中仍然可以再包含匿名對象。

在C#3.0中允許我們在程序中聲明一個臨時的類型來存儲數據,例如:

class Program
    {
        static void Main(string[] args)
        {
            //聲明一個匿名對象,擁有 Name和Age 屬性
            var obj = new { Name = "Joey", Age = 25 };//這裡的new { Name = "Joey", Age = 25 } 就是一個匿名類型 ,obj則是這個類型的一個對象,稱為匿名對象
            Console.WriteLine("匿名對象obj : Name=" + obj.Name + " , Age=" + obj.Age);
        }
    }

上述代碼中,我們聲明了一匿名對象obj ,然後輸出對象的屬性值。
如果在VS 你將鼠標移到 obj前面的var 上面,vs 會提示:obj 是一個匿名類型 ‘a 。這個‘a 是編譯器自動作為標識的一個類型,匿名對象在編譯時,編譯器還是得給它一個類型。其實上面的匿名類型 new { Name = “Joey”, Age = 25 } 是直接從Object繼承過來的, 相當於

public class ‘a{
public string Name{get;private set;}

    public int Age{get;private set;}  

}

這樣的一個擁有只讀屬性的自定義類型。

在MSDN 中匿名類型的定義是這樣的:

1.匿名類型提供了一種方便的方法,可用來將一組只讀屬性封裝到單個對象中,而無需首先顯式定義一個類型。

2.類型名由編譯器生成,並且不能在源代碼級使用。每個屬性的類型由編譯器推斷。

3.可通過使用 new 運算符和對象初始值創建匿名類型。

上面三句話是所謂的”說到點子上了”.讓人一看就明白匿名類型。但是在這裡,我還得提一提,匿名類型和var 隱式類型化的聲明關鍵字的關系;
很多新手在看到var 聲明時,就覺得這是一個匿名對象,匿名類型的對象是必須用var 來聲明,但是用var 聲明的對象不一定都是匿名對象,例如 var n=5; 你就不能說n 是一個匿名對象,n只是一個隱式類型化的局部變量;而 var s=new{ S1=”abc”,S2=”def”}; s 則是一個 類型為匿名類型的對象。也就是說 匿名對象是 用var 聲明的一個 在內存中臨時的類型的對象。它的類型不能像隱式類型那樣根據右邊的實例畫表達式來推斷類型,它是一個實實在在的匿名類型,而var i=5; 這種隱式類型的聲明,編譯時,i其實還是 int32 類型,隱式類型只是一種語法。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved