4

我在我的应用程序中使用 ASP.NET Web 窗体和 C#。我有一个名为 的类文件,我在其中使用和属性Global.cs定义变量。我通过实例化该类对象在任何页面上的任何位置使用这些变量。setget

这是我的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;
        }
    }

}

这是在整个项目中使用变量的正确方法吗?这种方法可能有哪些优点和缺点,你们会采用什么方法来使用全局变量?

4

3 回答 3

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;
于 2012-06-09T06:04:34.197 回答
2

在这两种溴化物之外, “全局是坏的”和“属性是好的”......你的方法本质上没有任何问题。去吧!

恕我直言.. PSM

于 2012-06-09T06:03:05.150 回答
1

实例化该类对象后看不到变量的原因是变量被声明为静态。静态变量旨在由该庄园使用 ClassName.variableName 或 ClassName.PropertyName

于 2012-06-09T09:08:37.017 回答