首页 > 代码库 > 匿名类型
匿名类型
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的初始化为什么要用第一个泛型类呢?这是因为初始化器中,如果参数的名称和顺序都相同,那么创建对象的时候会传入不同类型的参数来创建不同的类型对象
匿名类型
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。