在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类?
2017-07-25 10:41
381 查看
首先说一下理论:静态构造函数是实现一个类进行初始化方法成员。它一般对于静态函数初始化。静态构造函数不能有参数(意味着不能被重载),不能有修饰符(静态构造器永远是私有的所以不能有修饰符)不能被调用,当类被加载时类的静态构造函数被自动调用。用static关键字声明 静态构造函数的运行准则: 1、在一个程序执行过程中,静态构造函数值执行一次 2、静态构造器在类的静态成员初始化之后执行。或者讲编译器会将静态成员初始化语句转换成赋值语句放在静态构造器执行的最开始。如:下面那个类里面 class A { public static int i=100; } 这个类为了给这个静态成员初始化,会自动创建一个静态构造器,如果不给i赋值,就不会自动创建那个静态构造器 3、静态构造器在任何类的静态成员被应用之前执行 class A { public static int i=100; static A() { Console.WriteLine("静态"); } public A() { Console.WriteLine("动态"); } } class Program { static void Main(string[] args) { Console.WriteLine(A.i); Console.ReadLine(); } }的打印结果为 静态 100()说明了第三点 4、静态构造器在任何类的实例变量被分配前执行 class A { public static int i=100; static A() { Console.WriteLine("静态"); } public A() { Console.WriteLine("动态"); } } class Program { static void Main(string[] args) { A a = new A(); A a1 = new A(); Console.ReadLine(); } }打印结果为 静态 动态 动态(说明了第一点和第四点) 静态构造器最主要作用就是对类的静态成员进行初始化
相关文章推荐
- EF(Entity Framework)发生错误”正在创建模型,此时不可使用上下文“的解决办法。 正在创建模型,此时不可使用上下文。如果在 OnModelCreating 方法内使用上下文或如果多个线程同时访问同一上下文实例,可能引发此异常。请注意不保证 DbContext 的实例成员和相关类是线程安全的。 临时解决了这个问题,在Context的构造函数中,禁用了自动初始化:
- 静态构造函数, 静态成员初始化/调用顺序
- 在对象创建的时候就自动初始化成员变量-构造函数
- java 父类子类静态成员,实例成员,构造函数初始化的顺序
- java 父类子类静态成员,实例成员,构造函数初始化的顺序
- C++构造函数的自动调用(调用一个父类的构造函数,有显性调用最好,否则就默认调用无参数的构造函数)——哲学思想:不调用怎么初始化父类的成员数据和VMT?
- java 程序加载过程---3--类中申明同时申明类的静态对象 创建类的实例 访问类的静态变量 调用类的静态方法 使用反射方法 初始化类的子类对象 直接使用java.exe 调用某个类
- C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
- C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
- C#箴言:用静态构造函数初始化静态成员
- 从零开始学C++之构造函数与析构函数(二):初始化列表(const和引用成员)、拷贝构造函数
- 不调用构造函数而创建一个类型实例
- Java多态 实例子类自动调用父类为空的构造方法 成员变量不支持Override 可写,没多态效果
- 使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”。
- C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
- java 中的 成员变量、局部变量、静态变量、类变量、非静态变量、实例变量、向前引用、非法向前引用、静态代码块、非静态代码块 执行时机
- java 中的 成员变量、局部变量、静态变量、类变量、非静态变量、实例变量、向前引用、非法向前引用、静态代码块、非静态代码块 执行时机
- C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
- C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
- 指针 和引用 || 静态成员函数 || 虚函数 || 系统调用和库函数 ||