关于C#静态构造函数的几点说明

函数|静态

  静态构造函数是C#的一个新特性,其实好像很少用到。不过当我们想初始化一些静态变量的时候就需要用到它了。这个构造函数是属于类的,而不是属于哪里实例的,就是说这个构造函数只会被执行一次。也就是在创建第一个实例或引用任何静态成员之前,由.NET自动调用。

  class SimpleClass
  {
  // Static constructor
  static SimpleClass()
  {
  //
  }
  }

  在使用静态构造函数的时候应该注意几点:

  1、静态构造函数既没有访问修饰符,也没有参数。因为是.NET调用的,所以像public和private等修饰符就没有意义了。

  2、是在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类,也就是说我们无法直接调用静态构造函数,也就无法控制什么时候执行静态构造函数了。

  3、一个类只能有一个静态构造函数。

  4、无参数的构造函数可以与静态构造函数共存。尽管参数列表相同,但一个属于类,一个属于实例,所以不会冲突。

  5、最多只运行一次。

  6、静态构造函数不可以被继承。

  7、如果没有写静态构造函数,而类中包含带有初始值设定的静态成员,那么编译器会自动生成默认的静态构造函数。

时间: 2024-10-15 11:57:41

关于C#静态构造函数的几点说明的相关文章

C#箴言:用静态构造函数初始化静态成员

函数|静态 编写程序的时候难免要使用到静态成员,由于静态成员的访问是脱离类型对象的,所以使用非静态构造函数,私有方法或者一些其他方法都是不合理的..Net提供了成员初始化语句和静态构造函数来初始化静态成员. 根据上一个单元,我们可以知道静态成员的初始化语句会早于静态构造函数执行,其次还知道成员初始化语句的好处和一些限制.这里要提的一点就是,静态构造函数和实例构造函数之间的区别,因为静态构造函数是由CLR调用执行的,所以静态构造函数只能是一个,同时不能还有参数.那么静态构造函数相对于成员初始化的一

由struct的静态构造函数说起

最近才知道struct和class的静态构造函数的触发规则是不同的,不像class在第一次使用类的时候触 发静态构造函数.如果只访问struct实例的字段是不会触发静态构造函数调用的.通过测试发现当访问静 态字段,struct本身的函数(静态和实例)和带参数的构造函数就会引起静态构造函数的执行.而调用默 认构造和未覆写的基类虚函数是不会的.为什么呢? 让我们先来看看class和struct在调用构造函数时的区别.class使用newobj指令而struct使用initobj 指令来构造对象.ne

C#静态构造函数与抽象类构造函数的面试题

前段时间找工作,去面试碰到了两道关于C#构造函数的题目,首先来看静态构造函数的题目如下(原题不 是如此,但类似,因为实在记不住那题目的样子了,第二题也是): class Base { static Base() { Console.WriteLine("Static Base"); } public Base() { Console.WriteLine("Base"); } } 问当创建Base的实例时产生什么输出?我咋一看,挺简单,我当时认为:构造函数为类的成员

C#静态构造函数

静态构造函数是C#的一个新特性,其实好像很少用到.不过当我们想初始化一些静态变量的时候就需要用到它了.这个构造函数是属于类的,而不是属于哪里实例的,就是说这个构造函数只会被执行一次.也就是在创建第一个实例或引用任何静态成员之前,由.NET自动调用. class SimpleClass { // Static constructor static SimpleClass() { // } } 在使用静态构造函数的时候应该注意几点: 1.静态构造函数既没有访问修饰符,也没有参数.因为是.NET调用的

利用静态只读字段和静态构造函数提高性能

主要内容一句话概括: 把相对固定的数据在编译时仅通过查询一次数据库填充到公开的静态只读泛型集合类型字段中从而杜绝后续可能的数据库查询以提高性能. 相关背景:我们的应用程序中常常需要一些类似全国的省份列表这样的集合数据,而这些数据基本上是固定不变的或者是很长时间才会变一次.对于这样的数据,开发中我们常用的一个做法就是把这些数据存在数据库表中,然后查询填充到需要的地方.我觉得这种做法很脏,因为我们多次去查询这些固定不变的数据没有什么意义,或者进一步我们顶多缓存这些数据以避免一些查询以提高性能,也就是

Effective C#原则13:用静态构造函数初始化类的静态成员

(译注:initializer在上文中译为了"初始化器",实在不好听 ,本文中全部改译为:"预置方法") 你应该知道,在一个类 型的任何实例初始化以前,你应该初始化它的静态成员变量.在里C#你可以使用 静态的预置方法和静态构造函数来实现这个目的.一个类的静态构造函数是一个 与众不同的,它在所有的方法,变量或者属性访问前被执行.你可以用这个函数 来初始化静态成员变量,强制使用单件模式,或者实现其它任何在类型的实例可 用前应该完成的工作.你不能用任何的实例构造函数,其它

谈C#与C++在静态构造函数上的区别

在C#中,类的静态构造函数用于在使用类之前进行相关的初始化工作;比如,初始化静态成员或执行特定操作.CLR 在第一次创建该类对象或调用该类静态方法时自动调用静态构造函数.同时,CLR保证静态构造函数的线程安全性(准确地说是,只会调用一次,不存在多线程问题). 下面是MSDN对静态构造函数特点的描述: 1.静态构造函数既没有访问修饰符,也没有参数 2.在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类 3.无法直接调用静态构造函数 4.在程序中,用户无法控制何时执行静态构造函

C# 静态构造函数使用总结_C#教程

•静态构造函数既没有访问修饰符,也没有参数. •如果没有编写静态构造函数,而这时类中包含带有初始值设定的静态字段,那么编译器会自动生成默认的静态构造函数. •在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类,也就是说我们无法直接调用静态构造函数,也就无法控制什么时候执行静态构造函数了. •如果类中包含用来开始执行的 Main 方法,则该类的静态构造函数将在调用 Main 方法之前执行. •如果类中的静态字段带有初始化,则静态字段的初始化语句将在静态构造函数之前运

既然非静态构造函数里可以对静态字段赋值,那还要静态构造函数干嘛?

问题描述 既然非静态构造函数里可以对静态字段赋值,那还要静态构造函数干嘛?难道是为了在本类被实例化之前就可以使用静态字段吗? 解决方案 本帖最后由 syncsdn9 于 2016-03-23 16:29:23 编辑解决方案二:你没见过不需要实例化就能用的类吗?比如System.Array解决方案三:静态构造函数是你在调用这个函数的任何方法.属性(尤其是static的)之前执行,非静态构造函数是在new的时候才执行,这能一样吗?解决方案四:你最后句话还真说对了,静态字段与实例无关,不需要实例化就可