c# static變數的初始化
阿新 • • 發佈:2018-12-26
用static宣告的變數或函式,都是屬於類的,而不屬於類物件,所以最好不要在類的建構函式中為static變數初始化(不需要初始化的就不用顧忌了,因為c#預設會給static變數初化得,比如staitc整型變數,會初始化為0)。如果在類的建構函式中初始化static變數,那只有在你new過該類的物件後,static變數的初始化才起作用。
一、 例如:以下程式碼,定義了一個static_test的類,該類中有個static型別的list變數,並在建構函式中為其初始化
class static_test { //定義static變數 public static List<int> m_lst; public static_test() { //在建構函式中為m_lst初始化 m_lst = new List<int>(); for (int i = 0; i < 10; ++i) { m_lst.Add(i); } } /// <summary> /// 列印m_lst /// </summary> public static void PrintList() { if (m_lst == null) { Console.WriteLine("list is null"); return; } for (int i = 0; i < m_lst.Count; ++i) { Console.Write(m_lst[i] + " "); } Console.WriteLine(); } }
1. 此時,在沒有定義過static_test型別的物件時,直接呼叫static_test.PrintList(),情況如下:
static void Main(string[] args)
{
static_test.PrintList();
Console.ReadKey();
}
輸出:
list is null
2. 若定義過static_test型別的物件,再呼叫static_test.PrintList(),m_lst就有值了。
static void Main(string[] args) { static_test test = new static_test(); static_test.PrintList(); Console.ReadKey(); }
輸出:
0 1 2 3 4 5 6 7 8 9
二、我個人觀點,將需要初始化的靜態變數,在類中宣告時,就給初始化了,以避免不必要的錯誤。如下,加了個InitList()靜態成員函式,static成員變數在宣告時通過該函式初始化
class static_test { //定義static變數 public static List<int> m_lst = InitList(); public static_test() { } private static List<int> InitList() { List<int> lst = new List<int>(); for (int i = 0; i < 10; ++i) { lst.Add(i); } return lst; } /// <summary> /// 列印m_lst /// </summary> public static void PrintList() { if (m_lst == null) { Console.WriteLine("list is null"); return; } for (int i = 0; i < m_lst.Count; ++i) { Console.Write(m_lst[i] + " "); } Console.WriteLine(); } }
此時,在沒有定義過static_test型別的物件時,直接呼叫static_test.PrintList(),情況如下:
static void Main(string[] args)
{
static_test.PrintList();
Console.ReadKey();
}
輸出:
0 1 2 3 4 5 6 7 8 9