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

    C#的类初始化顺序和Java以及C++类初始化顺序是不同的,曾经我被这个问题害惨了。
    对于C#和Java,其共同点都是先变量后构造函数,先静态后普通 
    区别在于,C#是子类变量->父类变量->父类构造函数->子类构造函数,才轮到构造函数,但是Java的是父类变量->父类构造函数->子类变量->子类构造函数.

    using System; 
     
    namespace Test 
    { 
        public class A 
        { 
     
            private static Display d1 = new Display("基类静态变量"); 
            private Display d2 = new Display("基类变量"); 
            private static readonly Display d3 = new Display("基类静态readonly常量"); 
            private readonly Display d4 = new Display("基类 readonly常量"); 
     
            public A() 
            { 
                Console.WriteLine("基类 构造函数"); 
            } 
     
        } 
     
        class B : A 
        { 
            private static Display d1 = new Display("子类静态变量"); 
            private Display d2 = new Display("子类变量"); 
            private static readonly Display d3 = new Display("子类静态readonly常量"); 
            private readonly Display d4 = new Display("子类readonly常量"); 
     
     
            public B() 
            { 
                Console.WriteLine("子类 构造函数"); 
            } 
      
        } 
     
        /// <summary> 
        /// 用于显示的类 
        /// </summary> 
        class Display 
        { 
            public Display(string str) 
            { 
                Console.WriteLine(str); 
            } 
        } 
     
        class programe 
        { 
            static void Main(string[] args) 
            { 
                B b = new B(); 
     
            } 
        } 
    } 
    1. 子类静态变量 
    2. 子类静态readonly常量 
    3. 子类变量 
    4. 子类readonly常量 
    5. 基类静态变量 
    6. 基类静态readonly常量 
    7. 基类变量 
    8. 基类 readonly常量 
    9. 基类 构造函数 
    10. 子类 构造函数 

    而对于java呢,源码如下:

    package com.vision.paintTest; 
     
    class A { 
     
        private static Display d1 = new Display("基类静态变量"); 
        private Display d2 = new Display("基类变量"); 
        private static final Display d3 = new Display("基类静态final常量"); 
        private final Display d4 = new Display("基类 final常量"); 
     
        public A() { 
            System.out.println("基类 构造函数"); 
        } 
     
    } 
     
    class B extends A { 
        private static Display d1 = new Display("子类静态变量"); 
        private Display d2 = new Display("子类变量"); 
        private static final Display d3 = new Display("子类静态final常量"); 
        private final Display d4 = new Display("子类final常量"); 
     
        public B() { 
            System.out.println("子类 构造函数"); 
        } 
     
    } 
     
    class Display { 
        public Display(String str) { 
            System.out.println(str); 
        } 
    } 
     
    public class Mytest { 
     
        /** 
         * @param args 
         */ 
        public static void main(String[] args) { 
            // TODO Auto-generated method stub 
            B b = new B(); 
        } 
     
    } 
    

      

    结果如下:

    1. 基类静态变量 
    2. 基类静态final常量 
    3. 子类静态变量 
    4. 子类静态final常量 
    5. 基类变量 
    6. 基类 final常量 
    7. 基类 构造函数 
    8. 子类变量 
    9. 子类final常量 
    10. 子类 构造函数 
  • 相关阅读:
    Mycat适合场景及不适合场景
    solr与Elasticsearch对比
    分布式搜索之搭建Solrcloud(Solr集群)
    Mysql索引最左匹配原则
    CAS实现单点登录SSO执行原理及部署
    Spring Cloud,Dubbo及HSF对比
    Dubbo支持的协议的详解
    Dubbo架构设计详解
    几种分布式锁的实现方式
    深入分析volatile的实现原理
  • 原文地址:https://www.cnblogs.com/x-poior/p/5028374.html
Copyright © 2011-2022 走看看