C 3 0 新特性學習筆記 3 匿名型別

2022-02-14 13:23:04 字數 1324 閱讀 8307

有些時候我們需要臨時儲存一些運算的中間結果,特別是當這些中間結果是由多個部份組成時,我們常常會去宣告乙個新的型別,

以方便儲存這些中間結果。表面上看起來這很正常,而細想之後就會發現,這個新型別只服務於這個函式,其它地方都不會再使用它了,

就為這乙個函式而去定義乙個新的型別,確實有些麻煩。

現在,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.同一種...