c#类的成员初始化顺序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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); }
}