您的位置:首页 > 编程语言 > C#

C#中的全局变量及其一点延伸

2012-08-29 13:19 337 查看

转载

刚学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这样的格式调用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: