有些時候我們需要臨時儲存一些運算的中間結果,特別是當這些中間結果是由多個部份組成時,我們常常會去宣告乙個新的型別,
以方便儲存這些中間結果。表面上看起來這很正常,而細想之後就會發現,這個新型別只服務於這個函式,其它地方都不會再使用它了,
就為這乙個函式而去定義乙個新的型別,確實有些麻煩。
現在,c#3.0中的匿名型別特性就可以很好的解決上面提到的問題,通過匿名型別,我們可以簡單使用
new
的形式直接在函式中建立新的型別,是匿名初始化器。
物件:
看下面這個例子:
class
public
override
void
run()
; console.writeline(anonymoustype1.cardnumber);
console.writeline(anonymoustype1.name);
var anonymoustype2
=new
; anonymoustype2
=anonymoustype1; } }
在新型別中只能有欄位成員,而且這些欄位的型別也是通過初值的型別推斷出來的。如果在宣告新的匿名型別時,新型別的欄位名、
順序以及初始值的型別是一致的,那麼將會產生相同的匿名型別,所以上例中anonymoustype1和anonymoustype2的型別是相同的,
自然能進行anonymoustype2=anonymoustype1的賦值。
var p1
=new
; var p2
=new
; 那麼,編譯器會自動定義乙個包含name和age屬性的類。p1和p2結構相同,是同乙個類的例項。
下面,我們再定義乙個變數,
var p3
=new
; 表面上來看,意義是一樣的,但是語法不同,這樣編譯器會新建乙個新的類,也就是p3和p1,p2不是同乙個類的例項,因為p3宣告屬性的位置不相同。
陣列:
如果要定義陣列,可以這樣定義:
var intarray
=new
; var strarray
=new
; var sometypearray
=new
, new };
匿名型別要點:
1.可以使用new關鍵字呼叫匿名初始化器建立乙個匿名型別。
2.匿名型別直接繼承自system.object。
3.匿名型別的屬性是編譯器根據初始化器自動推斷。
匿名型別常和var一起使用。
C 3 0新特性之匿名型別
c 3.0允許將 new和乙個匿名物件初始化器一起來建立乙個匿名型別的物件。具體語法格式為 匿名物件建立表示式 new 匿名物件初始化器 匿名物件初始化器 成員宣告器列表 成員宣告器 成員宣告器列表,成員宣告器 成員宣告器 簡單名稱 成員訪問 識別符號 表示式 賦值表示式 注 簡單名稱就是已經定義在...
C 3 0特性之 匿名型別
匿名型別提供了一種方便的方法,可用來將一組唯讀屬性封裝到單個物件中,而無需首先顯式定義乙個型別。型別名由編譯器生成,並且不能在源 級使用。每個屬性的型別由編譯器推斷。可通過使用 new 運算子和物件初始值建立匿名型別。var person new console.writeline date.use...
回顧C 3 0新特性 3
四 lambda表示式 msdn中的描述 在 2.0 之前的 c 版本中,宣告委託的唯一方法是使用命名方法。c 2.0 引入了匿名方法,而在 c 3.0 及更高版本中,lambda 表示式取代了匿名方法,作為編寫內聯 的首選方式。使用最多的地方還是在linq。表現為 符號,念 goes to.同一種...