`
isiqi
  • 浏览: 16705758 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

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

阅读更多

刚学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# WinForm通过全局变量实现不同窗体之间传值的解决方案的源码.rar

    C# WinForm通过全局变量实现不同窗体之间传值的解决方案的源码

    C#将全局变量的字符串变为函数参数

    1. **全局变量**:在C#中,全局变量是指在类或结构的成员级别声明的变量,它们在整个程序执行期间都存在,并且可以在类或结构的任何方法中访问。全局变量的一个主要缺点是可能导致代码难以维护,因为它们可以被任何...

    Asp.net及C#全局变量使用方法汇总

    Asp.net及C#全局变量使用方法汇总

    c++通过结构体(struct)全局变量在多线程中传递参数

    目标:在一个线程运行的时候,主程序或者另一个线程,通过改变全局变量实时改变目标变量的做法,比如这里,楼主也就是我,为了在树莓派上运行一个tcp结构的客户端线程,并通过摄像头线程收集的数据实时的通过tcp客户端线程...

    C#中静态变量的使用

    C#中静态变量的使用 C# 中静态变量的使用是指在 C# 语言中使用静态变量的方法和技术。本文将详细介绍静态变量与非静态变量的区别、静态变量的使用方式、静态构造函数的使用等方面的知识点。 一、静态变量与非静态...

    Unity3D教程:成员变量和全局变量1

    Unity3D教程:成员变量和全局变量在函数外面定义的变量叫做成员变量,它们能够通过Unity的检查器进行访问,存储在成员变量中的值将自动地保存在项目中。}使用

    C# 公有变量 私有变量 静态变量

    本文将深入探讨C#中的公有变量(public)、私有变量(private)和静态变量(static),并结合20171028的C#编程实践进行说明。 **公有变量(public)** 公有变量是可以被程序任何部分访问的成员,无论是在同一类中...

    C# 4种变量

    C# 4种变量 思维导图 C# 4种变量 思维导图

    C#事件监视变量变化

    C#事件监视变量变化,事件推送机制,用于变量绑定场景,后台出发前台更新操作

    C# lua库 支持中文函数名中文变量

    本文将深入探讨“C# lua库 支持中文函数名中文变量”这一主题,基于lua 5.1版本,我们将讨论如何在C#中集成Lua,并支持中文的函数名和变量名。 首先,Lua是一种轻量级的脚本语言,以其简洁的语法和高效的执行性能而...

    c# 获取全局的鼠标坐标

    在C#编程中,获取全局鼠标坐标是一项常见的需求,特别是在开发需要实时监控鼠标位置的应用时。全局鼠标坐标指的是鼠标在操作系统屏幕上的精确位置,不受任何特定窗口或应用程序限制。下面我们将详细探讨如何在C#中...

    C# 列举系统中的环境变量

    在编程领域,尤其是在Windows操作系统上开发应用程序时,了解如何使用C#来列举系统中的环境变量是一项重要的技能。环境变量是存储系统或用户特定信息的变量,例如路径、配置设置等,它们可以被程序用来获取运行时所...

    C#清除无效的系统环境变量

    在IT领域,尤其是在软件开发中,管理系统的环境变量是一项重要的任务。环境变量是操作系统中存储配置信息的变量,它们影响程序的运行方式。有时,由于各种原因,如软件卸载不彻底或者手动编辑环境变量时出错,可能会...

    c#编程设置环境变量

    在C#编程中,环境变量是一个非常重要的概念,它们提供了在不同进程间共享信息的方式,尤其是在配置路径或者系统设置时。Visual Studio 2008是C#开发的一个经典版本,我们可以通过它来创建和管理工程。在这个场景中,...

    C# Hock 全局监听程序外的键盘和鼠标的事件

    在IT领域,尤其是在Windows应用程序开发中,有时我们需要捕获系统级别的事件,比如全局键盘和鼠标活动,即使这些事件发生在我们的应用程序之外。C#语言提供了一种实现这一目标的方法,通过使用钩子(Hook)技术。"C#...

    C#三种窗体之间传值全局变量、构造函数、委托

    总结,C#中在不同窗体间传递值有多种方式,包括全局变量、构造函数和委托。每种方法都有其适用场景和优缺点。全局变量方便但可能引发数据安全问题;构造函数适用于固定数据传递;委托则提供了一种灵活、动态的数据...

    C#使用全局钩子(hook)

    在 C# 开发中,使用全局钩子(hook)来监听键盘鼠标等事件是一种常见的做法。但是,在实际开发中,我们经常会遇到一些问题,例如 SetWindowsHookEx 返回值为 0,或者钩子回调函数不被调用等等。今天,我们就来解决...

    C#程序设计-3期(KC008) KC008110200017_如何设定ASP.NET中的全局变量.docx

    在ASP.NET开发中,全局变量通常用于存储在整个应用程序生命周期中都需要访问的数据。这些变量可以在不同页面之间共享,不受用户会话限制,适用于那些需要在整个应用范围内的数据存储。本篇文章将详细阐述如何在ASP...

    用全局变量实现程序暂停/继续控制

    在C++编程中,"用全局变量实现程序暂停/继续控制"是一个常见的需求,尤其是在处理复杂的逻辑或需要根据用户输入来动态控制程序流程时。全局变量可以在程序的任何作用域内访问,这使得它们成为控制程序状态的理想选择...

    c#源码 全局的hook 全局钩子

    在IT领域,全局钩子(Global Hooks)是一种高级技术,主要用于监控系统中特定事件,例如鼠标和键盘的输入。在C#编程环境下,通过全局钩子可以实现对系统的全局监听,以便于进行如数据捕获、行为分析或者调试等任务。...

Global site tag (gtag.js) - Google Analytics