转载自 http://blog.csdn.net/gshgsh1228/article/details/50867274
所有的类都至少包含一个构造函数。这些构造函数中可能有一个默认的构造函数,默认的构造函数没有参数,与类同名。其它带参数的构造函数称为非默认的构造函数。
在类的外部不能用私有的构造函数实例化对象,通过把默认的构造函数设置为私有,就可以强制类的用户使用非默认的构造函数。
一些类没有公共的构造函数,外部代码就不能实例化它。
静态成员,也称为共享成员,可以在类的实例之间共享。静态成员通过类直接引用。
一个类只能有一个静态的构造函数,该构造函数不能有访问修饰符,也不能带任何参数。静态构造函数不能直接调用,只能在下述情况下执行:
(1)创建包含静态构造函数的类的实例时
(2)访问包含静态构造函数的类的静态成员时
非静态构造函数也称实例构造函数。
静态类只包含静态成员,且不能用于实例化对象(如Console)。
任何构造函数都可以配置为在执行自己的代码前调用其他构造函数。
创建类的实例时,会调用类的构造函数,为了实例化派生的类,必须实例化它的基类;要实例化这个基类,有必须实例化这个基类的基类,这样一直实例化System.Object(所有类的根),因此无论使用什么构造函数实例化一个类,总是首先调用System.Object.Object().
下面用例子说明构造函数的执行顺序:
publicclass MyBaseClass
{
Public MyBaseClass()
{
}
Public MyBaseClass(int i)
{
}
}
publicclass MyDerivedClass:MyBaseClass
{
public MyDerivedClass()
{
}
public MyDerivedClass(int i)
{
}
public MyDerivedClass(int i,int j)
{
}
}
使用下面语句实例化MyDerivedClass
MyDerivedClass myObj=new MyDerivedClass();
构造函数执行顺序如下:
(1)执行System.Object.Object()
(2)执行MyBaseClass.MyBaseClass()
(3)执行MyDerivedClass.MyDerivedClass()
另外,使用下面语句实例化MyDerivedClass
MyDerivedClass myObj=newMyDerivedClass(4,8);
构造函数执行顺序如下:
(1)执行System.Object.Object()
(2)执行MyBaseClass.MyBaseClass()
(3)执行MyDerivedClass.MyDerivedClass(int i,int j)
如果我们想要得到下面的执行顺序:
(1)执行System.Object.Object()
(2)执行MyBaseClass.MyBaseClass(inti)
(3)执行MyDerivedClass.MyDerivedClass(int i,int j)
可以使用base关键字指定.NET实例化过程中使用基类中具有指定参数的构造函数,即:
publicclass MyDerivedClass:MyBaseClass
{
public MyDerivedClass()
{
}
public MyDerivedClass(int i)
{
}
public MyDerivedClass(int i,int j):base(i)
{
}
}
这样将不会调用MyBaseClass.MyBaseClass()
除base关键字外,关键字this也可指定构造函数初始化器。这个关键字指定在调用指定的构造函数前,.NET实例化过程对当前类使用非默认的构造函数。
例如:
publicclass MyDerivedClass:MyBaseClass
{
publicMyDerivedClass():this(5,6)
{
}
public MyDerivedClass(int i)
{
}
publicMyDerivedClass(int i,int j):base(i)
{
}
}
使用MyDerivedClass. MyDerivedClass()构造类,将执行下列序列:
(1)执行System.Object.Object()
(2)执行MyBaseClass.MyBaseClass(inti)
(3)执行MyDerivedClass.MyDerivedClass(int i,int j)
(4)执行MyDerivedClass.MyDerivedClass()