博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c#静态构造函数
阅读量:7120 次
发布时间:2019-06-28

本文共 920 字,大约阅读时间需要 3 分钟。

在网上看到一个经典的关于静态构造函数的问题:

class A

{
public static int X = B.Y + 1;
static A()
{
Console.WriteLine("static A: x={0}", X);
//X = B.Y + 1;
}
static void Main(string[] args)
{
Console.WriteLine(X);
}
}

class B

{
public static int Z = 10;

public static int Y =A.X + 1;

static B()

{
Console.WriteLine("Static B: Y = {0}",Y);
//Y = A.X + Z;
}
}
 

 

输出为:

Static B: Y = 1;

static A: x= 2;
2

 

分析:

因为Main函数在classA中,所以在程序执行的时候肯定会用到A,而A中有静态变量X,那么会先初始化静态变量,然后在调用其构造函数。
在初始化X的时候,发现用到了B,同理先初始化B中的Z和Y,然后调用B的静态构造函数。

很重要的一点是在静态构造函数调用之前就初始化了静态变量。

其实在Main函数中什么都不执行同样会输出一样的结果。

       static void Main(string[] args)
{
//Console.WriteLine(X);
}
  

因为静态构造函数是变量被引用的时候调用一次。

对于C#静态变量初始化,那么如果类中存在静态构造函数则静态字段初始值设定项的执行在该静态构造函数即将执行前发生。

C#高效编程里说到,这样一段话:
创建某个类型的第一个实例时,所进行的操作顺序为:
1.静态变量设置为0
2.执行静态变量初始化器
3.执行基类的静态构造函数
4.执行静态构造函数
5.实例变量设置为0
6.执行衯变量初始化器
7.执行基类中合适的实例构造函数
8.执行实例构造函数

同样类型的第二个以及以后的实例将从第五步开始执行

转载于:https://www.cnblogs.com/bingbingzhe/p/7126859.html

你可能感兴趣的文章
linux 环境下git的安装与配置
查看>>
Bootstrap学习笔记
查看>>
Linux配置虚拟主机后,只能访问到主页怎么办?
查看>>
HTTP状态码->HTTP Status Code
查看>>
AVL平衡树的插入例程
查看>>
验证控件的使用
查看>>
会计中的冲销和红票
查看>>
开启和关闭HBase的thrift进程
查看>>
swift学习_xcode6搭建
查看>>
MVC
查看>>
(寻找第K小的数&&寻找第K小的数的和)
查看>>
UVa 642 - Word Amalgamation
查看>>
Linux下编译安装qemu和libvirt
查看>>
VS NuGet使用
查看>>
转载:margin外边距合并问题以及解决方式
查看>>
手机摇一摇功能音量大小跟系统音量一致
查看>>
mysql用一个表更新另一个表的方法
查看>>
一键安装 redmine on windows 和发邮件设置
查看>>
Gradle笔记——构建基础
查看>>
空间矢量数据(.shp文件)之JAVA操作
查看>>