类初始化顺序

一.静态成员变量

可以理解为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() { }
}

image

私有化构造函数一般用于静态类或者无需实例的类。因为静态类不需要实例化,私有化构造函数为了防止开发人员无意义的实例化。

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;
    }
}

四.构造函数列表

参考了一些资料。但无法确定,希望知道的朋友告知一下。

原文地址:https://www.cnblogs.com/yuanhuaming/p/1630429.html