C# 构造器(构造器链),终结器,对象初始化器
2011-10-05 17:01
176 查看
一、构造器
1、注意事项
@1、构造器是用来创建对象实例的方法,该方法没有返回类型,访问级别必须为public,方法名必须完全和类名相同。
@2、C#编译器会在编译时自动添加一个默认构造器(不获取参数,什么也不做)。然而,一旦为一个类显式添加了一个构造器,c#编译器就不会再自动提供默认构造器了。
@3、可以显式的定义一个默认构造器,这也许是一种能讲某些字段初始化成特定值的构造器。定义默认构造器只需要声明一个不获取任何参数的构造器。
@4、当一个字段同时在声明时和构造器内部进行了不同的赋值时,字段的最终的值是在构造器内部所赋的值。因为只有字段在声明时被赋值发生后,构造器内部的赋值才会发生。所以,应该避免在同一个类中,既在声明时赋值,又在构造器中赋值。
2、在构造器重载时,使用构造器链避免输入重复代码
上述代码中对Employee对象进行初始化的代码在好几个地方都重复了,所以必须在多个地方进行维护。
为了避免输入重复代码,可以使用this在一个构造器中调用另一个构造器(称为构造器链),它是用构造器初始化器实现的。构造器初始化器会在执行当前构造器的实现之前,判断要调用另外那个构造器。
修改后代码如下:
运行结果:
二、终结器
终结器定义了对象在销毁过程中发生的事情。与c++的析构器不同,终结器不是在对一个对象的所有引用都消失之后就马上运行。相反,终结器是在一个对象最后一次活动以后,并在程序终止之前执行。具体的说,垃圾回收器会在一次垃圾回收过程中识别出带有终结器的对象。之后,它并不是立即回收这些对象,而是将它们添加到一个终结队列中。一个独立的线程遍历终结队列中的每一个对象,调用他们的终结器,然后把它们从队列中删除,使他们再次可供垃圾回收器使用。
三、对象初始化器
在c#3.0中引入的新特性。它能初始化一个对象中的所有允许访问的字段和属性。具体地说,在创建对象的构造器调用后,你可以增加一对大括号,并在其中添加一个成员初始化列表。每个成员的初始化操作都是一个赋值操作,等号左边是一个允许访问的字段属性,右边则是具体要赋的值。
例如:Employee e=new Employee(“su“,”zhen“) {Id=222,Salary=”not enough“};
事实上,这只是一项语法上的改进,最终生成CIL代码和用单独的语句对字段和属性进行赋值无异。
1、注意事项
@1、构造器是用来创建对象实例的方法,该方法没有返回类型,访问级别必须为public,方法名必须完全和类名相同。
@2、C#编译器会在编译时自动添加一个默认构造器(不获取参数,什么也不做)。然而,一旦为一个类显式添加了一个构造器,c#编译器就不会再自动提供默认构造器了。
@3、可以显式的定义一个默认构造器,这也许是一种能讲某些字段初始化成特定值的构造器。定义默认构造器只需要声明一个不获取任何参数的构造器。
@4、当一个字段同时在声明时和构造器内部进行了不同的赋值时,字段的最终的值是在构造器内部所赋的值。因为只有字段在声明时被赋值发生后,构造器内部的赋值才会发生。所以,应该避免在同一个类中,既在声明时赋值,又在构造器中赋值。
2、在构造器重载时,使用构造器链避免输入重复代码
上述代码中对Employee对象进行初始化的代码在好几个地方都重复了,所以必须在多个地方进行维护。
为了避免输入重复代码,可以使用this在一个构造器中调用另一个构造器(称为构造器链),它是用构造器初始化器实现的。构造器初始化器会在执行当前构造器的实现之前,判断要调用另外那个构造器。
修改后代码如下:
运行结果:
二、终结器
终结器定义了对象在销毁过程中发生的事情。与c++的析构器不同,终结器不是在对一个对象的所有引用都消失之后就马上运行。相反,终结器是在一个对象最后一次活动以后,并在程序终止之前执行。具体的说,垃圾回收器会在一次垃圾回收过程中识别出带有终结器的对象。之后,它并不是立即回收这些对象,而是将它们添加到一个终结队列中。一个独立的线程遍历终结队列中的每一个对象,调用他们的终结器,然后把它们从队列中删除,使他们再次可供垃圾回收器使用。
三、对象初始化器
在c#3.0中引入的新特性。它能初始化一个对象中的所有允许访问的字段和属性。具体地说,在创建对象的构造器调用后,你可以增加一对大括号,并在其中添加一个成员初始化列表。每个成员的初始化操作都是一个赋值操作,等号左边是一个允许访问的字段属性,右边则是具体要赋的值。
例如:Employee e=new Employee(“su“,”zhen“) {Id=222,Salary=”not enough“};
事实上,这只是一项语法上的改进,最终生成CIL代码和用单独的语句对字段和属性进行赋值无异。
相关文章推荐
- C#3.5语言新特性(一)-对象集合初始化器
- Orcas中C#语言的新特性:自动属性,对象初始化器,和集合初始化器
- 步步为营VS 2008 + .NET 3.5(3) - C# 3.0新特性之Automatic Properties(自动属性)、Object Initializers(对象初始化器)、Collection Initializers(集合初始化器)和Ext
- C# 3.0语言新特性(语言规范):4 对象和集合初始化器
- C#的新特性:自动属性,对象初始化器,和集合初始化器(转载)
- C# 对象和集合的初始化器
- c# 使用初始化器初始化对象
- C#对象和集合初始化器
- C#温故而知新学习系列之面向对象编程—对象初始化器(十五)
- C#中集合和对象初始化器的使用
- C# 3.0新特性之Automatic Properties(自动属性)、Object Initializers(对象初始化器)、Collection Initializers(集合初始化器)和Extension Methods(扩展方法)
- C# 3.0语言新特性(语言规范):4 对象和集合初始化器
- 深入理解C# 3.0的五项主要改进 (对象初始化器)
- C#对象初始化器
- c# 对象初始化器
- C#3.0新特性对象集合初始化器
- C# 3.0之自动属性和对象初始化器举例
- C#对象初始化器
- C# 对象初始化器与集合初始化器的若干问题
- c#对象初始化器、自动实现字段