您的位置:首页 > 其它

Static变量在Debug和Release模式下的初始化顺序偶有差异

2011-09-13 10:17 363 查看
新建一个简单的Console项目,包含三个class:





Helper.cs是一个工具类,提供一些静态的方法:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace StaticMember
{
class Helper
{
internal static string GetVersion()
{
Console.WriteLine("Step 2.<Helper.GetVersion> The methods GetVersion() had been invoked. It indicates that Tester.version had been initilized.");
return "V1.0.0.2566";
}
}
}



Tester.cs是一个含有静态变量的类:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace StaticMember
{
class Tester
{
static string version = Helper.GetVersion();

internal static void Init()
{
Console.WriteLine("Tester.Init()");
}
}
}



Program.cs中的Main函数初始化Tester类的一个实例。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace StaticMember
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine( "Step 1. <Program.Main> Before create an instance of Tester class. ");
Tester tester = new Tester();

//Tester.Init();

Console.Read();
}
}
}


按一般逻辑,应该是先显示Step1….., 然后再显示Step 2….。在Dubug模式下确实如此:





Release模式下,若直接在Vs.net中按F5运行也是显示上图结果,但若按“Ctrl+F5”键运行或直接点击“bin/release/StaticMember.exe”文件运行,则显示的是如下顺序:





甚是奇怪,未得其解!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: