c#类的成员初始化顺序

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

}

相关文档
最新文档