首页 > 其他 > 详细

匿名类型

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

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的初始化为什么要用第一个泛型类呢?这是因为初始化器中,如果参数的名称和顺序都相同,那么创建对象的时候会传入不同类型的参数来创建不同的类型对象

    

 

匿名类型

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!