今天对静态变量的销毁作了下研究,看到网上大家各有各的说法,但最终的一致结果是:静态变量是伴随程序的消亡而销毁,就像全局变量一样,随后看到了有人在执行存在静态
变量的类中的一些计算,如下:
Bus类:
public class Bus
{
public static int datay = Trunk.data + 1;
static Bus()
{
Console.WriteLine("calling Bus");
Console.Write(datay);
}
}
Trunk类:
public class Trunk
{
public static int data = 0;
static Trunk()
{
Console.WriteLine("calling Trunk");
Console.WriteLine(data);
data = Bus.datay + 1;
}
}
Main函数:
static void Main(string[] args)
{
Console.WriteLine("Data:{0},Datay:{1}", Bus.datay, Trunk.data);
Console.ReadLine()
}
运行结果:
最终总结出:每个类都有自己的静态构造函数,而且无论是实例化类多少次,都只会执行1次给静态变量的赋值,而且
每次执行时候,先过静态变量的定义,如图:
然后再进入静态构造函数进行赋值;但是,碰到如上图断点处,发现调用到Trunk类的data变量,就会首先跳转到Trunk类的该静态变量的定义处,
,进行初始化定义,再到静态函数的赋值,执行完毕后,跳转回首次执行的位置,对该位置的变量进行初始化赋值;并且,经过此次静态构造函数的
赋值后,其它的赋值都不会对其产生影响,改变其值;
希望以上讲述能帮助到大家,可以继续讨论研究,提出质疑!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
路漫漫其修远兮吾将上下而求索的意思,程序员,一定要多思考,多研究,亲身去验证一些问题,会更扎实!作软件是一件很值得思考的事情!