程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> static-多個包含靜態變量類的加載順序???

static-多個包含靜態變量類的加載順序???

編輯:編程綜合問答
多個包含靜態變量類的加載順序???

有三個類,SingletonCounter、Test、Singleton,裡面都包含了靜態變量,SingletonCounter、Test結構差不多,Singleton包含了靜態構造函數,靜態屬性等,將三個類的行都打上斷點(需要斷點的行有注釋——加斷點調試),當調試的時候,為什麼總是最後執行到SingletonCounter的靜態變量instance上???

測試了很多,和Singleton類的靜態構造函數有關,望指點一二,謝謝!!!

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

namespace _04_Singleton3
{
class Program
{
[STAThread]
static void Main()
{//加斷點調試
var temp = Singleton.Instance;
var str = Test.str;
for (int i = 0; i < 20; i++)
{
Console.WriteLine("Next singleton value: {0}", SingletonCounter.Instance.NextValue());
}
Console.ReadKey();
}
}

//1、sealed 類
sealed class SingletonCounter
{
    private int Count = 0;//加斷點調試

    //2、私有構造函數
    private SingletonCounter() 
    {//加斷點調試 

    }

    //3、公開靜態實例對象
    public static readonly SingletonCounter Instance = new SingletonCounter();//加斷點調試 

    public long NextValue()
    {
        return ++Count;
    }
}

sealed class Test
{
    private int count = 0;//加斷點調試

    public static string str = "aaa";//加斷點調試

    public static readonly Test Instance = new Test();//加斷點調試
}

sealed class Singleton
{
    private static readonly Singleton instance = new Singleton();//加斷點調試
    static Singleton()
    {//加斷點調試
    }

    private Singleton()
    {//加斷點調試
    }

    public static Singleton Instance//加斷點調試
    {
        get
        {
            return instance;
        }
    }
    /* 
     * 
     * 
     * 
     * 
     * 
     */

}

}


最佳回答:


我看了一下,類 Singleton 貌似並沒有引用 類 SingletonCounter 但是你的這幾個類都寫在了同一個.CS文件中,那麼我猜測,你在調試時,系統會編譯並加載所有的類。
當加載類時,就會觸發其靜態部分的代碼(靜態字段,靜態構造函數,或許還有靜態屬性),所以你的斷點就觸發在 SingletonCounter 中了

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved