C# 求ctor构造器和beforefieldinit方法相关的知识
- 提问者网友:绫月
- 2021-04-21 15:50
- 五星知识达人网友:第幾種人
- 2021-04-21 16:41
constructor 是一个对象的方法,用来初始化对象。
可以有多个constructor,但每一个至少有一个constructor initializer(类似于继承,但不是继承,要么base(...) 要么this(...),若没有constructor Initializer,则编译器会提供默认的base()。默认的constructor,若一个类没有定义constructor,编译器会提供默认的constructor : className(){}。变量初始化器(instance varible initializer),最先执行,也就是说在constructor 和constructor initializer之前执行(这一点和java不同)。constructor不能被继承。(所以叫constructor initializer)。
http://www.cnblogs.com/jax/archive/2007/09/09/887609.html这里有相对详细的讲解。希望对你有帮助。
因为类型构造器本身的特点,在一定程度上决定了.cctor的调用时机并非是一个确定的概念。因为类型构造器都是private的,用户不能显式调用类型构造器。所以关于类型构造器的执行时机问题在.NET中主要包括两种方案:
- precise方式
- beforefieldinit方式
二者的执行差别主要体现在是否为类型实现了显式的静态构造函数,如果实现了显式的静态构造函数,则按照precise方式执行;如果没有实现显式的静态构造函数,则按照beforefieldinit方式执行。
为了说清楚类型构造器的执行情况,我们首先在概念上必须明确一个前提,那就是precise的语义明确了.cctor的调用和调用存取静态成员的时机存在精确的关系,所以换句话说,类型构造器的执行时机在语义上决定于是否显式的声明了静态构造函数,以及存取静态成员的时机,这两个因素。
但这个问题比较抽象,我理解的也不是很好。给你找了个网站,
http://www.kuqin.com/dotnet/20090406/44364.html