有三個類,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 中了