C#类的初始化
类的构造函数
类的构造函数,有实例构造函数和静态构造函数。如果我们没有构造函数,系统会为我们生成一个默认构造函数,如果我们已经定义了构造函数,系统就不会再为我们生成构造函数。
class SimpleClass { // Static variable that must be initialized at run time. static readonly long baseline; // Static constructor is called at most one time, before any // instance constructor is invoked or member is accessed. static SimpleClass() { baseline = DateTime.Now.Ticks; } }
没有继承的情况
先考虑一个类的情况,不考虑类的继承。
- 静态变量
- 静态构造函数
- 非静态变量
- 非静态构造函数
class Class1 { public static int Count = 0; static Class1() { Count++; } public Class1() { Count++; } }
看下面的代码,当弟一次实例化时, Count值变成2, 当第二次实例化时, 则不会执行静态构造函数与静态变量. 此时Count的值变成3. 所以,最后结果Count值为3
class MyClass { public static void Main() { Class1 c = new Class1(); Class1 cc = new Class1(); Console.WriteLine(Class1.Count.ToString()); Console.Read(); } }
有继承的情况
如果类有基类,那么基类和子类的初始化顺序如下:
- 继承类静态成员变量初始化
- 继承类静态构造函数调用
- 继承类实例变量初始化
- 基类静态静态成员变量初始化
- 基类静态构造函数调用
- 基类实例变量初始化
- 基类构造方法调用
- 继承类构造方法调用