C#3.0笔记(四)对象初始化器与匿名类型
2009-05-30 20:22
218 查看
在上一篇文章中介绍过C#3.0的新特性var关键字已经扩展方法,这一篇blog中将会介绍下对象初始化器以及匿名类型。
初识对象初始化器
首先我们来看一个Employee类型:
在c#2.0里面我们要定义一个Employee对象时莫非于这样:
在c#3.0里面提供了一种简洁的方式让我们来定义和初始化一个Employee对象:
这样我们只需要少量的代码就完成了一个对象的初始化。
集合的初始化
由对象初始化,我们很快就能联想到集合初始化的语法。
新的初始化确实为我们带来了方便,这种语法结构更像数组初始化时的语法。
匿名类型
在很多时候我们需要定义一个类型只需要在本程序中使用,而不需要项目间重用,在C#2.0里面我们需要完整地定义这样的类型:
也许这样定义一个类并不是很大的工作量,但是如果需要封装很多数据成员的话,那就太消耗我们的体力了。C#3.0里面提供了新的语法让我们来定义一个匿名类型:
要注意的是在定义匿名类型时,我们只能用var关键字去申明。匿名类型都是自动继承于System.Object,因此它们支持Object的每一个成员,如:ToString()。我们可以通过前面一节定义的辅助方法来看看:
结果:
我们可以看到编译器给我们分配了一个类型。
嵌套的匿名类型
上面的例子就是在里面再添加一个匿名类型来表示部门信息的。
在使用匿名类型时我们一定要注意,不要因为匿名类型放弃使用强类型的类或结构。其实匿名类型在Linq查询的时候用的比较多,同时我们在使用的时候还要注意以下几点:
1) 没有控制类型的名称;
2)匿名类型都是继承于System.Object;
3)匿名类型的创建只能使用默认的初始化;
4)匿名类型不支持事件,自定义方法,自定义重写;
5)匿名类型是隐式封闭的。
下一篇:C#3.0笔记(五)Lambda表达式
作者:Henllyee Cui
出处: http://henllyee.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明。
初识对象初始化器
首先我们来看一个Employee类型:
public class Employee { public string FirstName{ get; set; } public string LastName { get; set; } public int Age { get; set; } }
在c#2.0里面我们要定义一个Employee对象时莫非于这样:
Employee e = new Employee(); e.FirstName = "Henllyee"; e.LastName = "Cui"; e.Age = 23;
在c#3.0里面提供了一种简洁的方式让我们来定义和初始化一个Employee对象:
var employee = new Employee { Age = 10, FirstName = "Henllyee", LastName = "Cui" };
这样我们只需要少量的代码就完成了一个对象的初始化。
集合的初始化
由对象初始化,我们很快就能联想到集合初始化的语法。
List<Employee> listEm = new List<Employee> { new Employee{ Age=23, FirstName="Henllyee", LastName="Cui"}, new Employee { Age=25, FirstName="Fred", LastName="Zhang"} };
新的初始化确实为我们带来了方便,这种语法结构更像数组初始化时的语法。
匿名类型
在很多时候我们需要定义一个类型只需要在本程序中使用,而不需要项目间重用,在C#2.0里面我们需要完整地定义这样的类型:
public class SomeClass { //方法 //属性 //字段 //... }
也许这样定义一个类并不是很大的工作量,但是如果需要封装很多数据成员的话,那就太消耗我们的体力了。C#3.0里面提供了新的语法让我们来定义一个匿名类型:
var em = new { FirstName = "Henllyee", Age = 23, LastName = "Cui" };
要注意的是在定义匿名类型时,我们只能用var关键字去申明。匿名类型都是自动继承于System.Object,因此它们支持Object的每一个成员,如:ToString()。我们可以通过前面一节定义的辅助方法来看看:
var em = new { FirstName = "Henllyee", Age = 23, LastName = "Cui" };
Console.Write(em.DisplayDefinigAssembly());
结果:
我们可以看到编译器给我们分配了一个类型。
嵌套的匿名类型
var em = new { FirstName = "Henllyee", Age = 23, LastName = "Cui", Depart = new {DepartID=1,DepartName="项目中心"} };
上面的例子就是在里面再添加一个匿名类型来表示部门信息的。
在使用匿名类型时我们一定要注意,不要因为匿名类型放弃使用强类型的类或结构。其实匿名类型在Linq查询的时候用的比较多,同时我们在使用的时候还要注意以下几点:
1) 没有控制类型的名称;
2)匿名类型都是继承于System.Object;
3)匿名类型的创建只能使用默认的初始化;
4)匿名类型不支持事件,自定义方法,自定义重写;
5)匿名类型是隐式封闭的。
下一篇:C#3.0笔记(五)Lambda表达式
作者:Henllyee Cui
出处: http://henllyee.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明。
相关文章推荐
- C#特性 学习笔记(对象初始化器 匿名类型 扩展方法)
- C#3.0对象初始化器和匿名类型
- [javase学习笔记]-6.5 类类型參数与匿名对象
- 对象初始化器、集合初始化器、自动属性、匿名类型
- C#3.0 新特性学习笔记(1): 对象集合初始化器
- c#语法糖代码——自动属性, 匿名类型,对象与集合初始化器,扩展方法
- 谈谈”隐藏类型局部变量、扩展方法、对象与集合初始化器、匿名类型“
- C#3.0 新特性学习笔记(3):匿名类型
- [C#基础知识]专题十三:全面解析对象集合初始化器、匿名类型和隐式类型
- [C#基础知识]专题十三:全面解析对象集合初始化器、匿名类型和隐式类型
- [C#基础知识]专题十三:全面解析对象集合初始化器、匿名类型和隐式类型 推荐
- [javase学习笔记]-6.5 类类型参数与匿名对象
- [C#基础知识]专题十三:全面解析对象集合初始化器、匿名类型和隐式类型
- Visual Basic 9.0 前沿播报·静态篇(二)对象初始化器和匿名类型
- java学习笔记(六)----对象的类型转换, 匿名内置类
- [读书笔记]C#学习笔记四: C#2.0泛型 可控类型 匿名方法和迭代器
- [读书笔记]C#学习笔记五: C#3.0自动属性,匿名属性及扩展方法
- OpenJDK源码研究笔记(五)-缓存Integer等类型的频繁使用的数据和对象,大幅度提升性能(一道经典的Java笔试题)
- 【笔记】 《js权威指南》- 第3章 类型、值和变量 - 3.5 全局对象
- C#3.0之自动属性&对象初始化器