[科普]C执行顺序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C# 类的初始化顺序
继承类的static数据成员的初始化器,
继承类的static构造器 (在类名, 第一次被引用时, 调用, 如果, 没有这个构造器, 则static数据成员何时被初始化, 是不可预测的)
继承类的实例型数据成员的初始化器
在执行继承类的构造器的内容之前;
基类的static数据成员的初始化器即 static int a = 1;
/// 类数据成员的定义
基类的static 构造器 ,(如果,基类的类名, 先于继承类被引用, 则先执行基类的static构造器)
基类的实例型数据成员的初始化器
基类的构造器
接着执行继承类的构造器的内容;
Example :
public class Base
{
A: private static int Number = 12;
B: private int localNumner = 1;
C: static Base()
{
///
}
D: public Base()
{
}
}
public class Child : Base
{
E: private static int ChildNumber = 14;
F: private int local_child_number = 7;
G: static Child()
{
///
}
H: public Child()
{
I: ///
}
}
Child child = new Child();
初始化顺序为
E G
F H A C B D I;
static构造器的调用时刻是, 第一次引用该类的类名;
public class Test
{
static Test()
{
}
public staitc int Account
{
get
{
return 1;
}
}
/// 只是举例
public static int GetAccount()
{
return 1;
}
public class Nested
{
}
public delegate void Add();
}
当 X1: Test.Account();
X2: Test a = new Test();
X3: Test.GetAccount();
X4: Test.Nested p = new Test.Nested();
X5: Test.Add a = new Add(someMethods);
{ X1, X2, X3, X4, X5 }, 只要第一次出现其中的某一个; 就调用Test的
static构造器
欢迎您的下载,资料仅供参考!