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这样的格式调用。
相关文章推荐
- C#中的全局变量及其一点延伸
- 转载:C#中的全局变量及其一点延伸
- const,static,全局变量细节及其区别
- Delphi研究,对全局变量函数与OOP编程关系的一点体会 good
- 在C#中怎么设置一个全局变量,方便我在其他的窗口中可以调用
- C#中hashtable的全局变量用法
- js中全局变量的一点小知识点
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
- c#工程中全局变量的定义方法
- C#中后台申明全局变量来判断某一特定值的代码
- C#全局变量的使用
- C# 全局变量的定义
- net学习之C#面向对象 大富翁V2.1 优化代码,加入. 全局变量,Exception异常.
- 【C#】类单例 可以解决全局变量的问题
- C# 全局变量与局部变量
- C#中如何定义全局变量及在各窗体中使用全局变量
- C# 语言中怎么使用“全局变量”?
- 对全局变量的multiple definition的一点理解
- C# 全局变量
- c# 把对象加入队列,对象为全局变量,对象改变队列值也跟着改变