类初始化顺序
一.静态成员变量
可以理解为Appdomain加载时就初始化的类。调用顺序是先调用父类的静态成员变量,逐层调用。
二.类的成员变量
调用顺序是先调用父类的成员变量,逐层调用。
这个例子证明是优先初始化变量:
public class Customer
{
private string _name = "about";
private string _value ;
public Customer(){
Console.WriteLine(_name);
Console.WriteLine(_value);
//output:
// about
// null
}
}
三.初始化构造函数
1.构造函数的调用顺序是先调用System.Object,在按照层次结构由基类向继承类进行,直到编译器要实例化的那个类为止。
我们经常写的默认构造函数,如果没有在大括号前强制设定另个构造函数的引用,编译器就默认我们要调用基类的构造函数。
调用另一个构造函数的关键字只能是base和this。
public class Customer
{
public Customer(){}
//
//public Customer():base(){}
}
2.不要在继承类的父类中私有化构造函数,否则会编译器回报错。也印证了构造函数的调用顺序
public class Customer : GenericCustomer
{
public Customer(){}
}
public class GenericCustomer
{
private GenericCustomer() { }
}
私有化构造函数一般用于静态类或者无需实例的类。因为静态类不需要实例化,私有化构造函数为了防止开发人员无意义的实例化。
3.构造函数的其它用处
合理使用this,base能够使代码非常简洁
public class Customer
{
private string _name;
private string _value;
public Customer(string name,string value)
{
_name = name;
_value = value;
}
public Customer(string name)
:this(name,"")
{
_name = name;
}
}
四.构造函数列表
参考了一些资料。但无法确定,希望知道的朋友告知一下。