轉載
剛學JAVA和C#時,對於用慣了C++中的全局變量的我來說,很是不習慣:所有的東西都在類裏面,沒有可以現成的存放全局變量的地方。但有位大蝦教我說可以通過定義類實現全局變量的功能,我嘗試了,記錄下我的學習心得。
{
//******************************************************************
//*Hashtable用於存放全局變量,由key和value成對實現。
//******************************************************************
private static Hashtable table = new Hashtable();
//******************************************************************
//*由於是私有構造函數,不能由new產生實例,所以只有一個實例,
//*保證了該類在程序中是唯一的。
//******************************************************************
private GlobalVariable()
{
}
public static object GetValue(object akey)
{
return table[akey];
}
public static void SetValue(object akey,object avalue)
{
table[akey] = avalue;
}
public static void Remove(object akey)
{
table.Remove(akey);
}
}
在該類中,我們通過SetValue來把需要存放的全局變量通過key來存入Hashtable中。當需要讀取全局變量的時候,可以通過GetValue來讀出。當然,我們也可以通過Remove來刪除一個變量。
需要注意的是,這個類通過GetValue取出的值要做轉型的工作。必須要非常小心,否則會出現Exception,所以最好在調用此處的時候,把它放在try塊中。
關於變量全局化的一點點延伸:
通過這種類,我們可以在C#的Windows編程中,非常容易的實現多窗口的變換顯示。下面構造的類就能實現此功能:
{
private FormManager()
{
//
// TODO: 在此處添加構造函數邏輯
//
}
private static Form forMain = null;
private static Form frmLogon = null;
public static Form FrmMain{
get{ return frmMain;}
}
/**//// <summary>
/// 顯示主頁面
/// </summary>
/// <returns></returns>
public static Form ShowMain(){
if (frmMain == null || frmMain.IsDisposed)
frmMain = new FrmMain();
frmMain.Show();
return frmMain;
}
/**//// <summary>
/// 顯示登入頁面
/// </summary>
/// <param name="isMode">如爲true,則窗體顯示爲模式對話框</param>
/// <returns></returns>
public static Form ShowLogon(bool isMode){
if (frmLogon == null || frmLogon.IsDisposed)
frmLogon = new FrmLogon();
frmLogon.StartPosition = FormStartPosition.CenterScreen;
if (isMode)
frmLogon.ShowDialog();
else
frmLogon.Show();
return frmLogon;
}
/**//// <summary>
/// 程序啓動入口
/// </summary>
public static void Main(){
Application.Run(ShowLogon());
}
}
在C#中,處處是類,要實現如C語言或C++中的全局變量和全局函數的話,需要構造靜態類。該靜態類中,最明顯的特徵是:構造函數是私有的,而其他所有的函數都是靜態的。
下面的靜態類就可以作爲全局變量用:
該程序實現了頁面的靜態調用。在C#的Windows Forms編程中,程序的入口要從Application.Run()開始。因此,在該程序中,開始顯示頁面爲登錄頁面。當然,還有一種最簡單的只存放常量的類,姑且稱爲常量類。構造如下:
{
private Constants()
{
}
public const double PI = 3.14159265;
public const string DATABASE_SCHEMA = "MANULI.";
public const string APP_DATABASE_CONNECT_STR = "ConnectionString";
public const string DATE_FORMAT_SHORT = "yyyy-MM-dd";
}
通過這樣的定義,我們在程序中可以不用構造實例變量,直接通過Constants.PI這樣的格式調用。