var dude = new ;
編譯器將這個語句編譯成類似於下面的東西:
internal
class anonymousgeneratedtypename
public
string name }
public
int age }
// the equals and gethashcode methods are overridden (see chapter 6).
// the tostring method is also overridden.
}...
var dude = new anonymousgeneratedtypename ("bob", 23);
你必須使用var關鍵字去引用乙個匿名型別,因為它沒有名字。
匿名類中屬性名可以根據表示式中得到,如:
int age = 23;
var dude = new ;
等同於:
var dude = new ;
如果在相同的程式集中宣告的兩個匿名型別具有相同生命順序和型別和名字的引數,那麼認為這兩個匿名型別是相同的。
var a1 = new ;
var a2 = new ;
console.writeline (a1.gettype() == a2.gettype()); // true
此外,equals方法在匿名型別中被重寫了,從而能夠執行正確的等於比較運算:
console.writeline (a1 == a2); // false
console.writeline (a1.equals (a2)); // true
你可以像下面這樣建立乙個匿名型別的陣列:
var dudes = new
,new
};
匿名型別在c#3.0被引入,主要是為了linq這個更大的概念。在linq的學習中,我們將繼續介紹這個型別。 C 學習筆記(三) C 高階特性 匿名方法
delegate int transformer int i transformer sqr delegate int x console.writeline s qr 3 9他在語義上與下列的lambda表示式的宣告是一樣的 transformer sqr int x public event e...
C 學習筆記(三) C 高階特性 擴充套件方法
public static class stringhelper iscapitalized方法像例項方法一樣被string來呼叫,像這樣 console.writeline perth iscapitalized 擴充套件方法被編譯後會被編譯器轉換為普通的靜態類的靜態方法的呼叫,像這樣 conso...
C 3 0 新特性學習筆記 3 匿名型別
有些時候我們需要臨時儲存一些運算的中間結果,特別是當這些中間結果是由多個部份組成時,我們常常會去宣告乙個新的型別,以方便儲存這些中間結果。表面上看起來這很正常,而細想之後就會發現,這個新型別只服務於這個函式,其它地方都不會再使用它了,就為這乙個函式而去定義乙個新的型別,確實有些麻煩。現在,c 3.0...