zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

《圣殿祭司的ASP.NET4.0专家技术手册》----2-8 对象初始化程序

ASP技术对象程序 ---- 手册 初始化 专家
2023-09-11 14:17:33 时间
对象初始化程序(Object Initializers)可以在初始化一个对象时,不需明确调用构造函数(Constructor),就可以访问其公开的字段或属性。

本节书摘来自异步社区《圣殿祭司的ASP.NET4.0专家技术手册》一书中的第2章,第8节,作者: 奚江华,译者: 武海军 , 更多章节内容可以访问云栖社区“异步社区”公众号查看。

2-8 对象初始化程序

圣殿祭司的ASP.NET4.0专家技术手册
对象初始化程序(Object Initializers)可以在初始化一个对象时,不需明确调用构造函数(Constructor),就可以访问其公开的字段或属性。

2-8-1 关于对象的初始化与构造函数

什么是对象的初始化与构造函数?以下为顾客Customer.cs类:

140 public class Customer

141 {

142 public string Name;

143 public int Age;

144 public int Height;

145 public int Weight;

146 public string Country;

147 public string PhoneNo;

149 //默认构造函数

150 public Customer() { }

152 //构造函数一

153 public Customer(string name, string country)

154 {

155 this.Name = name;

156 this.Country = country;

157 }

159 //构造函数二

160 public Customer(string name, int height, int weight, string country)

161 {

162 this.Name = name;

163 this.Height = height;

164 this.Weight = weight;

165 this.Country = country;

166 }

167 }

Customer类只是一个蓝图,不能直接使用,必须先初始化类的实体Mary,例如:

Customer Mary= new Customer(); //使用默认构造函数初始化Customer类实体
然后才能访问或设置Mary实体的Field字段及Property属性:

Mary.Name= " Mary ";

Mary.Country = " France ";

以上程序共3行,若使用构造函数一,可精简成一行:

Customer Mary = new Customer("Mary", "France"); //使用构造函数一
若想在初始化时为Mary设置更多属性,则可使用构造函数二指定更多的参数:

Customer Mary = new Customer("Mary", 175, 55, "France"); //使用构造函数二
故可理解,使用构造函数一及构造函数二来初始化对象,语法较默认构造函数简单利落,可是构造函数一和构造函数二好用归好用,但如果想在初始化时,一并指定Age及PhoneNo属性,这可就办不到,因为没有包含这两个属性的构造函数,所以不能在一行程序就完成初始化,除非再另外加入额外的构造函数三,这是传统C# 2.0及VB 8以前语言的罩门。所以还是得走回头路,乖乖使用默认构造函数初始化对象,一一指定所有属性:

Customer Mary= new Customer();

Mary.Name= " Mary ";

Mary.Age= "28";

Mary.Height=175;

Mary.Weight=55;

Mary.Country = " France ";

Mary.PhoneNo= "0955-256138";

但如果只是为了在初始化阶段,可以设置一个不存在于构造函数中的属性或字段,就必须再加入额外的构造函数,这就开始感觉不便了;倘若再进一步思考,如果类字段或属性一口气增加到30个时,怎么办?难不成要建立10个或20个以上的构造函数,来应付不同初始化指定参数的需求?想想……这已经不是不方便了,而是开始有笨拙的意味了。

2-8-2 对象初始化程序在类上的运用

在此整理一下传统C#语言在对象初始化过程的几个重点:

(1)对象初始化及属性设置程序行数过多,不够精简,需要改进;

(2)在对象初始化阶段,可指定构造函数中参数的优点,需要保留;

(3)无法指定没有出现在构造函数中的属性,例如,限制Age及PhoneNo属性,需要改进。

若将以上几点的思考作为C# 3.0语言的改进,这个答案就是“对象初始化程序”,其优点如下:

(1)可以用精简的一行程序来初始化对象;

(2)提供类似构造函数指定参数方式初始化对象;

(3)可以任意调用指定所有公开的字段或属性,不需要刻意建立多个构造函数,只求设置更多的参数。

且看下面的范例,了解“对象初始化程序”是如何进行改良。

范例2-5 以对象初始化程序初始化Customer类
在此以对象初始化程序来初始化Customer类,显示其简洁性与威力,请参考ObjectInitBasic.aspx程序:


c2a54cc6ae864cd94cc6d1b117a82ac68212b25d

程序说明
请比较上面用虚线框住的程序,两者精简程度落差相当大,再者,对象初始化程序想要任意指定公开的参数也没问题,不必受到构造函数参数的限制。

对象初始化程序也得到Visual Studio的Intellisense支持。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。


《圣殿祭司的ASP.NET4.0专家技术手册》----2-10 匿名类型 C# 2.0有匿名方法(Anonymous Method),而C# 3.0又新增了“匿名类型(Anonymous Types)”,它的目的是“提供一个简单的途径将一组只读的属性封装在一个对象之中”,且在第一时间不必声明其明确类型。
《圣殿祭司的ASP.NET4.0专家技术手册》----1-11 代码段 代码段英文叫Code Snippet,又称为IntelliSense Code Snippet,它是在Visual Studio程序编辑器中,单击鼠标右键或快捷键就能够选择一堆内建的程序片段。
《圣殿祭司的ASP.NET4.0专家技术手册》----2-12 扩展方法 扩展方法(Extension Methods)允许针对现有类型加入自定义方法,而不必用传统方式,先继承然后再实现方法,最后还要再进行编译,完全省略了这些不必要的步骤。 然而,什么时候需使用到扩展方法?通常有两个时机: (1)需扩展类型额外的方法,就可通过扩展方法加入额外的方法; (2)希望直接使用系统已建立好的扩展方法,这种情况在LINQ中尤其明显。
《圣殿祭司的ASP.NET4.0专家技术手册》----2-9 集合初始化程序 集合初始化程序(Collection Initializer)与上一节的对象初始化程序很像,只不过集合初始化程序的对象是集合类,且是实现IEnumerable功能的集合。
《圣殿祭司的ASP.NET4.0专家技术手册》----2-11 Lambda表达式 Lambda表达式(Lambda Expressions)其功能属于Anonymous Function,但比.NET 2.0的匿名方法具备更强能力,语法更为简洁,应用的场景更为广泛。
《圣殿祭司的ASP.NET4.0专家技术手册》----2-2 静态与动态语言的比较 静态语言(statically typed languages)。 若一种程序语言的类型检查(Type Checking)工作是发生在编译时期(Compile Time),则称为静态语言。C#与Java都是静态语言代表,程序编写时必须使用明确的类型声明,编译的当下,编译程序就会进行类型检查,且变量或对象的类型一旦声明后,在运行时就无法任意更换类型,否则会发生Exception错误。
《圣殿祭司的ASP.NET4.0专家技术手册》----2-4 DLR动态执行环境 在.NET 4.0平台下有3个重要动态角色:①dynamic动态类型、②IronPython与IronRuby动态语言、③DLR(Dynamic Language Runtime)动态执行环境,前两者之所以能够存在,在于DLR的创建,DLR克服了原本.
《圣殿祭司的ASP.NET4.0专家技术手册》----1-10 程序代码重构 所谓重构(Refactoring),是指对软件程序进行重新改写或调配,那干嘛不直接叫Rewrite?意义当然不一样,因为Rewrite只是单纯地改写,不一定有什么了不得的意义,而重构是含有目的性的改写,或重新优化整个程序架构,其中甚至有“方法论”在里头,也就是有许多程序方法学的指导性方针,“重构”一
《圣殿祭司的ASP.NET4.0专家技术手册》----2-13 自动实现属性 回顾C# 2.0,当时发明了部分类(Partial Class)的机制,也就是将原本一个类定义分割成几个单位,根据需求将它们分散到不同的 .cs类文件中,而在编译时,编译程序会将原本分散的部分整合成一个类。
《圣殿祭司的ASP.NET4.0专家技术手册》----2-6 C# 3.0语言功能 C# 3.0语言支持以下8大功能。第一项LINQ查询表达式在第3章会有完整介绍,除最后一个功能外,其余语法在声明LINQ查询会用到,如果你已熟悉可直接跳到下一章,否则有必要了解一下
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。