程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> c#3.0系列:Anonymous Type In CLR(3.5)(2)

c#3.0系列:Anonymous Type In CLR(3.5)(2)

編輯:關於C語言

再看看下面的例子。

Code

1class Program
2  {
3     static void Main(string[] args)
4    {
5      var p1 = new { Name = "IORI", Age = 27 };
6      var p2 = new { Name = "IORI", Age = 27 };
7      var p3 = new { Name = "GUOJUN", Age = 27 };
8       var p4 = new person { Name = "GUOJUN", Age = 27 };
9       Console.WriteLine("Base class of {0} is {1}", p1.GetType().Name, p1.GetType().BaseType);
10       Console.WriteLine("p1.ToString() = {0}", p1.ToString());
11      Console.WriteLine("p1.GetType() = {0}", p1.GetType());
12      Console.WriteLine("p3.GetType() = {0}", p3.GetType());
13      Console.WriteLine ("p4.GetType() = {0}", p4.GetType());
14       Console.WriteLine("p1.GetHashCode() = {0}", p1.GetHashCode ());
15      Console.WriteLine("(p1.GetHashCode() == p2.GetHashCode())= {0}", p1.GetHashCode() == p2.GetHashCode ());
16      Console.WriteLine("(p1.GetHashCode() == p3.GetHashCode())= {0}", p1.GetHashCode() == p3.GetHashCode ());
17      Console.WriteLine("p1.Equals(p2)= {0} ", p1.Equals(p2));
18      Console.WriteLine ("p1.Equals(p3)= {0}", p1.Equals(p3));
19       Console.WriteLine("p3.Equals(p4)= {0}", p3.Equals(p4));
20      Console.WriteLine("(p1 == p2)= {0}", p1 == p2);
21      Console.WriteLine ("object.ReferenceEquals(p1.GetType(),p2.GetType()) = {0}", object.ReferenceEquals(p1.GetType(), p2.GetType()));
22       Console.WriteLine("object.ReferenceEquals(p1.GetType (),p3.GetType()) = {0}", object.ReferenceEquals(p1.GetType(), p3.GetType()));
23      Console.WriteLine ("object.ReferenceEquals(p3.GetType(),p4.GetType()) = {0}", object.ReferenceEquals(p3.GetType(), p4.GetType()));
24       Console.Read();
25    }
26  }
27
28   class person
29  {
30    public int Age {get;set;}
31    public string Name {get; set;}
32  }
33

我們看看輸出的結果。

通過以上的結果我們更能對Compiler會為Anonymous Type創建的類型 更好的理解。

GetHashCode()  實現時,根據匿名類型的每個成員作為 System.Collections.Generic.EqualityComparer<T>的輸入,來計算hash 值。因此,如果2個匿名類型有相同的屬性字段,同時每個字段的值也相同,那 麼生成的Hash值也就相等。

ToString()  只是簡單的用 屬性名稱/屬性 值 構造了一個字符串。

Equals()   結果相等,因為它使用值來比較 相等。

==      結果不等,因為匿名類型沒有重載 == 和 != , 這兩個操作符默認情況下,比較的是對象的引用而不是值。

總結:

• Anonymous types繼承 System.Object.

• The fields and propertIEs 是read-only.

• Anonymous types 不支持 events, custom methods, custom Operators, or custom overrides.

• Anonymous types 是個密封類.

• Anonymous types 用自己定義的構造方法(不可以修改)來創建的.

最重 要的是

Compiler在生成Anonymous types 的時候,並不是為每個如{N=?, N2 =? , ...}的結構生成一個不同的Type,它只會為不同的參數列表的結構:參 數的名稱,參數的數據類型,參數的相互順序定義不同的Type(不包含參數的值) 。而具有相同的參數列表的{N=?, N2 =? , ...}會共享同一個Type。但是這種僅 限於在同一個Assembly中,編譯器只會生成一個匿名類型,這些對象都是該唯一 的匿名類型的實例。

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