码迷,mamicode.com
首页 > 其他好文 > 详细

匿名类型

时间:2014-10-28 17:18:55      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   ar   sp   strong   数据   div   

1 匿名类型

     匿名类型就是通过隐式类型,对象初始化器来构造一个类型未知的对象,因此匿名类型可以在未知类型的时候创建对象。

     有以下代码:

           //匿名类型
            var p1 = new { Name = "小王", Age = 25 };
            var p2 = new { Name = "小明", Age = 27 };
            
            var p3 = new { Name = 24, Age = "小李" };
            var p4 = new { Age = 34, Name = "小华" };
            var p5 = new { Name2 = "小花", Age = 22 };

            Console.WriteLine("p1==p2:{0}", p1.GetType() == p2.GetType());
            Console.WriteLine("p1==p3:{0}", p1.GetType() == p3.GetType());
            Console.WriteLine("p1==p4:{0}", p1.GetType() == p4.GetType());
            Console.WriteLine("p1==p5:{0}", p1.GetType() == p5.GetType());

 

   运行结果:

      p1==p2:True
  p1==p3:False
  p1==p4:False
  p1==p5:False

 2  本质分析

     反编译代码IL如下图所示:

      bubuko.com,布布扣

   从反编译代码中可以看出,匿名类型的本质一个私有的泛型类型 ,类中有只读字段 和只读属性

  2 分析运行结果

     (1)结论:

     初始化器中的参数名称、参数类型、参数的属性都一致时,这些匿名类型的对象都属于同一种数据类型,也就是由同一个类创建而来的不同对象,反之,则属于不同

   数据类型

      (2) 

        根据上面的运行结果,我们认为编译器会自动生成4个类,但是实际上是几个呢?我们反编译看一下:

       bubuko.com,布布扣

            这里变量p3的初始化为什么要用第一个泛型类呢?这是因为初始化器中,如果参数的名称和顺序都相同,那么创建对象的时候会传入不同类型的参数来创建不同的类型对象

    

 

匿名类型

标签:style   blog   http   color   ar   sp   strong   数据   div   

原文地址:http://www.cnblogs.com/never-giveUp/p/4057223.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!