• c#类的成员初始化顺序【转】


    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                // DriveB d = new DriveB();  
                DriveC f = new DriveC();
            }
        }
    
        class BaseA
        {
            static DisplayClass a = new DisplayClass("基类静态成员初始化");
    
            DisplayClass BaseA_c = new DisplayClass("基类实例变量BaseA_c初始化");
    
            public BaseA() { Console.WriteLine("基类构造方法被调用A"); }
        }
    
        class DriveB : BaseA
        {
            static DisplayClass DriveB_b = new DisplayClass("继承类静态成员DriveB_b初始化");
            //static BaseA DriveB_a = new BaseA();        
            DisplayClass DriveB_c = new DisplayClass("继承类实例变量DriveB_c初始化");
    
            public DriveB() { Console.WriteLine("继承类构造方法被调用B"); }
        }
        class DriveC : DriveB
        {
            static DisplayClass DriveC_d = new DisplayClass("继承类静态成员DriveC_d初始化");
            DisplayClass DriveC_e = new DisplayClass("继承类静态成员DriveC_e初始化");
            public DriveC()
            {
                Console.WriteLine("继承类构造方法被调用C");
            }
        }
        class DisplayClass
        {
            public DisplayClass(string diplayString)
            {
                Console.WriteLine(diplayString);
                Console.WriteLine();
            }
        }
    
    }

     

     

    输出结果为:

    继承类静态成员DriveC_d初始化

    继承类静态成员DriveC_e初始化

    继承类静态成员DriveB_b初始化

    继承类实例变量DriveB_c初始化

    基类静态成员初始化

    基类实例变量BaseA_c初始化

    基类构造方法被调用A 继承类构造方法被调用B 继承类构造方法被调用C 请按任意键继续. . .

    由此可见c#中类成员的初始化与java不同,总结下有四条规律

    1。类成员变量初始化先于类的构造函数

    2。静态成员变量先于实例变量

    3。子类成员变量先于父类成员变量

    4。父类构造函数先于子类构造函数

    class A
        {
            public static int X;
            static A()
            {
                X = B.Y + 1;
            }
        }
        class B
        {
            public static int Y = A.X + 1;
            static B() { 
                Y = A.X + 1; 
            }
            static void Main()
            {
                Console.WriteLine("X={0},Y={1}", A.X, B.Y);
            }
    
        }
  • 相关阅读:
    vue 基础补充
    正则
    vue 指令
    函数式编程FP 初探
    .? ?? es2020
    vue alfont scss
    网络安全靶场通关指南
    Java 程序设计——站内短信系统
    Java 程序设计——登录系统
    动态规划法解找零钱问题
  • 原文地址:https://www.cnblogs.com/lovebear/p/2523405.html
Copyright © 2020-2023  润新知