C#中的全局變量及其一點延伸

轉載

剛學JAVA和C#時,對於用慣了C++中的全局變量的我來說,很是不習慣:所有的東西都在類裏面,沒有可以現成的存放全局變量的地方。但有位大蝦教我說可以通過定義類實現全局變量的功能,我嘗試了,記錄下我的學習心得。

public class GlobalVariable
{
//******************************************************************
//*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編程中,非常容易的實現多窗口的變換顯示。下面構造的類就能實現此功能:

public class FormManager
{
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()開始。因此,在該程序中,開始顯示頁面爲登錄頁面。

當然,還有一種最簡單的只存放常量的類,姑且稱爲常量類。構造如下:

public class Constants
{
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這樣的格式調用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章