zoukankan      html  css  js  c++  java
  • 类初始化顺序

    一.静态成员变量

    可以理解为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;
        }
    }

    四.构造函数列表

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

  • 相关阅读:
    MySQL迁移升级解决方案
    Python json和simplejson的使用
    ASP.NET使用Memcached高缓存实例的初级介绍
    Spring Cloud Stream在同一通道根据消息内容分发不同的消费逻辑
    JS高级---函数的几个成员
    JS高级---bind方法的使用
    JS高级---bind方法
    JS高级---总结apply和call方法的使用
    JS高级---apply和call都可以改变this的指向
    JS高级---复习
  • 原文地址:https://www.cnblogs.com/yuanhuaming/p/1630429.html
Copyright © 2011-2022 走看看