C# 构造函数 初始化器(构造器)
来源:互联网 发布:软件项目实施工作总结 编辑:程序博客网 时间:2024/06/07 04:06
有时,在一个类中有几个构造函数,以容纳某些可选参数,这些构造函数都包含一些共同的代码。
例如,下面的情况:
class Car {private string description; private uint nWheels; public Car(string model, uint nWheels) { this.description = description; this.nWheels = nWheels; } public Car(string description) { this.description = description; this.nWheels = 4; } // etc. }这两个构造函数初始化了相同的字段,显然,最好把所有的代码放在一个地方。C#有一个特殊的语法,称为构造函数初始化器,可以实现此目的:
class Car {private string description;private uint nWheels;public Car(string description, uint nWheels){ this.description = description; this.nWheels = nWheels; } public Car(string description) : this(description, 4) { } // etc}
这里,this关键字仅调用参数最匹配的那个构造函数。注意,构造函数初始化器在构造函数之前执行。现在假定运行下面的代码: Car myCar = new Car("Proton Persona"); 在本例中,在带一个参数的构造函数执行之前,先执行带2个参数的构造函数(但在本例中,因为带一个参数的构造函数没有代码,所以没有区别)。
C#构造函数初始化符可以包含对同一个类的另一个构造函数的调用(使用前面介绍的语法),也可以包含对直接基类的构造函数的调用(使用相同的语法,但应使用base关键字代替this)。初始化符中不能有多个调用。 在C#中,构造函数初始化符的语法类似于C++中的构造函数初始化列表,但C++开发人员要注意,除了语法类似之外,C#初始化符所包含的代码遵循完全不同的规则。可以使用C++初始化列表指定成员变量的初始值,或调用基类构造函数,而C#初始化符中的代码只能调用另一个构造函数。这就要求C#类在构造时遵循严格的顺序,但C++就没有这个要求。这个问题详见第4章,那时就会看到,C#强制遵循的顺序只不过是良好的编程习惯而已。转载 :http://blog.csdn.net/luofeng0710/article/details/6606454
假如一个泛型类型定义了译个静态构造器,那么针对每个封闭类型,这个构造器都会执行一次
(Dictionary<,> 开发类型 Dictionary<int,int> 封闭类型)
internal class Node { protected Node m_next; public Node(Node next) { m_next = next; } } internal sealed class TypedNode<T> : Node { public T m_data; public TypedNode(T data) : this(data, null) { } public TypedNode(T data, Node next) : base(next) { m_data = data; } public override String ToString() { return m_data.ToString() + ((m_next != null) ? m_next.ToString() : null); } }
其中每个节点都是一个不同的数据类型。
比如:
private static void DifferentDataLinkedList() { Node head = new TypedNode<Char>(','); head = new TypedNode<DateTime>(DateTime.Now, head); head = new TypedNode<String>("Today is", head); Console.WriteLine(head.ToString()); Console.Read(); }
得到的结果 Today is2013/8/30 12:46:13,
- C# 构造函数初始化器
- C# 构造函数 初始化器(构造器)
- 构造函数初始化器
- 构造函数初始化器
- 构造函数初始化器
- C#关于构造函数初始化器的使用
- 构造函数(构造器)
- C# 静态构造函数(类型构造器)的要点
- 便利初始化函数与便利构造器
- OC初始化函数和便利构造器
- c++构造器中成员函数初始化
- C# 构造器(构造器链),终结器,对象初始化器
- C#箴言:使用构造函数初始化语句
- Java初始化(构造函数)
- (C++)构造函数初始化
- 构造器初始化顺序
- 构造器初始化
- 构造器的初始化
- mssql:between and 用法
- win7下vs2008,vs2010编译sqlite源码,生成sqlite3.lib
- 图形处理
- vb6.0 倒计时
- 一些注意事项
- C# 构造函数 初始化器(构造器)
- oracle的merge into
- Hadoop Speculative Task
- Apple 企业开发者账号&邓白氏码申请记录
- iOS7新特征汇总[02]新特征介绍2
- Mybatis中的Executor
- 每天学点Linux:二
- 不要在#include中使用".."
- java学习4