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

博客探讨了在Debug和Release模式下,Static变量的初始化顺序可能出现的不同现象。在Helper.cs工具类中定义了一些静态方法,Program.cs的Main函数初始化Tester类实例。通常预期显示'Step1….'先于'Step2….',但在Release模式下,通过特定方式运行程序,观察到的顺序却相反,引发思考。
摘要由CSDN通过智能技术生成
新建一个简单的Console项目,包含三个class:

    image

   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模式下确实如此:

     image

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

    image

 

     甚是奇怪,未得其解!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值