刚学JAVA和C#时,对于用惯了C++中的全局变量的我来说,很是不习惯:所有的东西都在类里面,没有可以现成的存放全局变量的地方。但有位大虾教我说可以通过定义类实现全局变量的功能,我尝试了,记录下我的学习心得。
publicclassGlobalVariable
{
//******************************************************************
//*Hashtable用于存放全局变量,由key和value成对实现。
//******************************************************************
privatestaticHashtabletable=newHashtable();
//******************************************************************
//*由于是私有构造函数,不能由new产生实例,所以只有一个实例,
//*保证了该类在程序中是唯一的。
//******************************************************************
privateGlobalVariable()
{
}
publicstaticobjectGetValue(objectakey)
{
returntable[akey];
}
publicstaticvoidSetValue(objectakey,objectavalue)
{
table[akey]=avalue;
}
publicstaticvoidRemove(objectakey)
{
table.Remove(akey);
}
}
在该类中,我们通过SetValue来把需要存放的全局变量通过key来存入Hashtable中。当需要读取全局变量的时候,可以通过GetValue来读出。当然,我们也可以通过Remove来删除一个变量。
需要注意的是,这个类通过GetValue取出的值要做转型的工作。必须要非常小心,否则会出现Exception,所以最好在调用此处的时候,把它放在try块中。
关于变量全局化的一点点延伸:
通过这种类,我们可以在C#的Windows编程中,非常容易的实现多窗口的变换显示。下面构造的类就能实现此功能:
publicclassFormManager
{
privateFormManager()
{
//
//TODO:在此处添加构造函数逻辑
//
}
privatestaticFormforMain=null;
privatestaticFormfrmLogon=null;
publicstaticFormFrmMain{
get{returnfrmMain;}
}
///<summary>
///显示主页面
///</summary>
///<returns></returns>
publicstaticFormShowMain(){
if(frmMain==null||frmMain.IsDisposed)
frmMain=newFrmMain();
frmMain.Show();
returnfrmMain;
}
///<summary>
///显示登入页面
///</summary>
///<paramname="isMode">如为true,则窗体显示为模式对话框</param>
///<returns></returns>
publicstaticFormShowLogon(boolisMode){
if(frmLogon==null||frmLogon.IsDisposed)
frmLogon=newFrmLogon();
frmLogon.StartPosition=FormStartPosition.CenterScreen;
if(isMode)
frmLogon.ShowDialog();
else
frmLogon.Show();
returnfrmLogon;
}
///<summary>
///程序启动入口
///</summary>
publicstaticvoidMain(){
Application.Run(ShowLogon());
}
}
在C#中,处处是类,要实现如C语言或C++中的全局变量和全局函数的话,需要构造静态类。该静态类中,最明显的特征是:构造函数是私有的,而其他所有的函数都是静态的。
下面的静态类就可以作为全局变量用:
该程序实现了页面的静态调用。在C#的Windows Forms编程中,程序的入口要从Application.Run()开始。因此,在该程序中,开始显示页面为登录页面。当然,还有一种最简单的只存放常量的类,姑且称为常量类。构造如下:
publicclassConstants
{
privateConstants()
{}

publicconstdoublePI=3.14159265;
publicconststringDATABASE_SCHEMA="MANULI.";
publicconststringAPP_DATABASE_CONNECT_STR="ConnectionString";
publicconststringDATE_FORMAT_SHORT="yyyy-MM-dd";
}
通过这样的定义,我们在程序中可以不用构造实例变量,直接通过Constants.PI这样的格式调用。
NOTE:
那时我刚学C#WinForm编程,后来学了Web编程,知道还有Session,Application的功能就是用来存储全局的数据,更本不需要自己写类。现在回想起来都觉得有点多余,但对我理解这些东西来说还是大有帮助的,希望大家也会受益。
本文介绍了一种在C#中实现全局变量的方法,利用静态类和Hashtable存储变量,并提供了示例代码,包括如何创建和使用全局变量类及常量类。
667

被折叠的 条评论
为什么被折叠?



