我在我的应用程序中使用ASP.NET Web Forms和C#。我有一个名为Global.cs
的类文件,其中我使用set
和get
属性定义变量。我通过实例化该类对象在任何页面上的任何位置使用这些变量。
这是我的Global.cs
文件:
using System;
using System.Data;
using System.Linq;
using System.Web;
/// <summary>
/// Contains my site's global variables.
/// </summary>
public static class Global
{
/// <summary>
/// Global variable storing important stuff.
/// </summary>
public static string gDate;
public static string gMobLength;
public static string gDateFormat;
public static string gApplicationNo;
public static string gBranchNo;
public static string gMemId;
public static string gIsEditable="false";
public static string gLoggedInUserName;
public static string ImportantData
{
get
{
return gDate;
}
set
{
gDate = value;
}
}
public static string MobileLength
{
get
{
return gMobLength;
}
set
{
gMobLength = value;
}
}
public static string DateFormat
{
get
{
return gDateFormat;
}
set
{
gDateFormat = value;
}
}
public static string ApplicationNo
{
get
{
return gApplicationNo;
}
set
{
gApplicationNo = value;
}
}
public static string BranchNo
{
get
{
return gBranchNo;
}
set
{
gBranchNo = value;
}
}
}
这是在整个项目中使用变量的正确方法吗?这种方法有什么可能的优缺点,你们采用什么方法来使用全局变量?
答案 0 :(得分:4)
首先,我建议使用自动实现的属性。
public static string BranchNo { get; set; }
稍微简化您的代码。至于这是否是一个好方法,取决于。有时简单直接更好,这属于那个类别。如果初始化后值不应更改,则可能需要在初始化时使用正确的单例:
public class Settings
{
private static Settings _current;
private static readonly object _lock = new object();
public static Settings Current
{
get
{
lock(_lock)
{
if (_current == null) throw new InvalidOperationException("Settings uninitialized");
return _current;
}
}
set
{
if (value == null) throw new ArgumentNullException();
if (_current != null) throw new InvalidOperationException("Current settings can only be set once.");
if (_current == null)
{
lock(_lock)
{
if (_current == null) _current = value;
}
}
}
}
public string ImportantData { get; private set; }
// etc.
}
初始化设置:
Settings.Current = new Settings{ ImportantData = "blah blah blah"};
访问:
var data = Settings.Current.ImportantData;
答案 1 :(得分:2)
在两个bromides之外的“全局变量都很糟糕”而“properties很好”......你的方法没有任何本质上的错误。去吧!
恕我直言.. PSM