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这样的格式调用。

NOTE:
那时我刚学C#WinForm编程,后来学了Web编程,知道还有Session,Application的功能就是用来存储全局的数据,更本不需要自己写类。现在回想起来都觉得有点多余,但对我理解这些东西来说还是大有帮助的,希望大家也会受益。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值