三、匿名類型的總結
匿名類型是直接從對象派生的引用類型。盡管應用程序無法訪問匿名類型,但編譯器仍會為其提供一個名稱。
如果兩個或更多個匿名類型以相同的順序具有相同數量和種類的屬性,則編譯器會將這些匿名類型視為相同的類型,並且它們共享編譯器生成的相同類型信息。如上邊賦值的那個例子。
匿名類型具有方法范圍。也就是說,聲明或是定義的匿名類型,只能在聲明或定義它的那個方法中使用,實際上,想定義匿名成員類型,根本是做不到的,如:private var ame;private var hehe = new { namea = "yyao", age = 24 };想通過這樣的方式,將他們定義為某類的成員,則報相同的錯:The contextual keyWord 'var' may only appear within a local variable declaration。
匿名類型不能像屬性一樣包含不安全類型。
由於匿名類型上的Equals 和 GetHashCode 方法是根據屬性的Equals 和GetHashcode 定義的,因此僅當同一匿名類型的兩個實例的所有屬性都相等時,這兩個實例才相等。如:
var noname = new { namea = "yyao", age = 24 };//匿名類型
var qname = new { namea = "yyao", age = 24 };
if (qname == noname)
{
//!=,所以不能輸出
Console.WriteLine("qname == noname");
}
if (qname.Equals(noname))
{
//Equal,能夠輸出
Console.WriteLine("qname equal noname");
}
if (qname.GetHashCode() == noname.GetHashCode())
{
//能夠輸出
Console.WriteLine("same hashcode");
}
四、總結
今天的很多東西,在第一篇和第二篇都已經用到過,今天再詳細的講講其原理和內部機制,加深印象,只是,學習中,過得太少了,以後,時時來看看自己的隨筆吧,也不失為復習的好方法。