C#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. 子类 构造函数 

相关文章