匿名类型

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如下图所示:

      

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

  2 分析运行结果

     (1)结论:

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

   数据类型

      (2) 

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

       

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

    

 

转载于:https://www.cnblogs.com/never-giveUp/p/4057223.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值