C#匿名类
类别:编程学习 浏览量:209
时间:2015-3-22 C#匿名类
C#匿名类C#匿名类型允许定义行内类型,无须显式定义类型。常和var配合使用来声明匿名类型。
一、匿名类的定义
1、匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需首先显式定义一个类型。
2、类型名由编译器生成,并且不能在源代码级使用。每个属性的类型由编译器推断。
3、可通过使用 new 运算符和对象初始值创建匿名类型。
4、所有的匿名类型都直接继承自System.Object,并且重写了方法Equals(),GetHashCode(),ToString()等方法。
二、匿名类的实例
var annoyCla1 = new
{
ID = 10010,
Name = "EdisonChou",
Age = 25
};
Console.WriteLine("ID:{0}-Name:{1}-Age:{2}", annoyCla1.ID,annoyCla1.Name, annoyCla1.Age);
三、匿名类的共享
可以想象一下,如果我们的代码中定义了很多匿名类,那么是不是编译器会为每一个匿名类都生成一个泛型类呢?答案是否定的,编译器考虑得很远,避免了重复地生成类型。换句话说,定义了多个匿名类的话如果符合一定条件则可以共享一个泛型类。
1、如果定义的匿名类与之前定义过的一模一样:属性类型和顺序都一致,那么默认共享前一个泛型类
var annoyCla1 = new
{
ID = 10010,
Name = "EdisonChou",
Age = 25
};
Console.WriteLine("ID:{0}-Name:{1}-Age:{2}", annoyCla1.ID,
annoyCla1.Name, annoyCla1.Age);
Console.WriteLine(annoyCla1.ToString());
// 02.属性类型和顺序与annoyCla1一致,那么共同使用一个匿名类
var annoyCla2 = new
{
ID = 10086,
Name = "WncudChou",
Age = 25
};
Console.WriteLine("ID:{0}-Name:{1}-Age:{2}", annoyCla1.ID,
annoyCla1.Name, annoyCla1.Age);
Console.WriteLine("Is The Same Class of 1 and 2:{0}",
annoyCla1.GetType() == annoyCla2.GetType());
通过上述代码中的最后两行:我们可以判断其是否是一个类型?答案是:True
2、如果属性名称和顺序一致,但属性类型不同,那么还是共同使用一个泛型类,只是泛型参数改变了而已,所以在运行时会生成不同的类:
var annoyCla3 = new
{
ID = "EdisonChou",
Name = 10010,
Age = 25
};
Console.WriteLine("ID:{0}-Name:{1}-Age:{2}", annoyCla3.ID,
annoyCla3.Name, annoyCla3.Age);
Console.WriteLine("Is The Same Class of 2 and 3:{0}",
annoyCla3.GetType() == annoyCla2.GetType());
我们刚刚说到虽然共享了同一个泛型类,只是泛型参数改变了而已,所以在运行时会生成不同的类。最后两行代码所显示的结果应该是False,他们虽然都使用了一个泛型类,但是在运行时生成了两个不同的类。
3、如果数据型名称和类型相同,但顺序不同,那么编译器会重新创建一个匿名类
var annoyCla4 = new
{
Name = "EdisonChou",
ID = 10010,
Age = 25
};
Console.WriteLine("ID:{0}-Name:{1}-Age:{2}", annoyCla4.ID,
annoyCla4.Name, annoyCla4.Age);
Console.WriteLine("Is The Same Class of 2 and 4:{0}",
annoyCla4.GetType() == annoyCla2.GetType());
运行判断结果为:False
标签:面向对象
您可能感兴趣
- 面向对象的装封、继承、多态的概念理解
- php使用面向对象如何写好代码(PHP面向对象程序设计模拟一般面向对象语言中的方法重载overload示例)
- python类继承和封装(Python面向对象程序设计类的封装与继承用法示例)
- php面向对象3大特征(PHP面向对象程序设计重载overloading操作详解)
- python图书管理系统(python面向对象法实现图书管理系统)
- python变量与对象的关系(Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析)
- php面向对象怎么调用属性(PHP面向对象程序设计__tostring和__invoke用法分析)
- python面向对象练习方法(Python面向对象实现一个对象调用另一个对象操作示例)
- python内置函数一览表(Python面向对象程序设计构造函数和析构函数用法分析)
- python面向对象基本思想(详解Python:面向对象编程)
- python面向对象编写案例(Python面向对象程序设计示例小结)
- python面向对象的介绍(Python面向对象思想与应用入门教程类与对象)
- 面向对象设计中的单一职责原则
- vue基础语法对象(浅析从面向对象思维理解Vue组件)
- javascript对象添加方法(详解JavaScript面向对象实战之封装拖拽对象)
- php面向对象如何开发(PHP创建对象的六种方式实例总结)
- 换代在即,现在是抄底 7.5代 高尔夫的最佳时机吗(换代在即现在是抄底)
- 2020年大众7.5代高尔夫R终结特别版 最后的呐喊(2020年大众7.5代高尔夫R终结特别版)
- 七年前的这部剧有毒,全剧只有女主红到发紫,男主至今无人认识(七年前的这部剧有毒)
- 宋轶除了演过于曼丽,原来还演过一个青楼女子(宋轶除了演过于曼丽)
- 赵丽颖第一部当女主的戏,主角配角个个都是实力演员(赵丽颖第一部当女主的戏)
- 乾隆为何这么喜爱白塔原因是什么(乾隆为何这么喜爱白塔原因是什么)
热门推荐
- dedecms后台账号(dedecms实现首页顶部会员登陆框的方法)
- reactnative示例代码(React Native项目框架搭建的一些心得体会)
- docker从一个容器中退出来(Docker容器迁移到其他服务器的5种方法详解)
- IT技术类在团队管理上的几个建议
- dedecms有哪些功能(dedecms 二次开发之审核时间同步更新)
- sqlserver连接字符串函数(SQL SERVER 2012新增函数之字符串函数FORMAT详解)
- mysql读写分离怎么做(MySQL读写分离,写完读不到问题如何解决)
- dedecms中的有些功能如何修改(织梦DEDECMS中用JS方式调用评论总数的技巧)
- docker端口配置(docker 无法释放端口的解决方案)
- ASP.NET中Web.config文件的配置
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9