Глобальные переменные в c # .net - PullRequest
44 голосов
/ 15 марта 2010

Как установить глобальную переменную в веб-приложении C #?

Я хочу установить переменную на странице (возможно, на главной странице) и получить доступ к этой переменной с любой страницы.

Я не хочу использовать ни кеш, ни сессии.

Я думаю, что мне нужно использовать global.asax. Любая помощь?

Ответы [ 6 ]

102 голосов
/ 15 марта 2010

Используйте общедоступный статический класс и получайте к нему доступ из любого места.

public static class MyGlobals {
    public const string Prefix = "ID_"; // cannot change
    public static int Total = 5; // can change because not const
}

используется так же, с главной страницы или где-либо еще:

string strStuff = MyGlobals.Prefix + "something";
textBox1.Text = "total of " + MyGlobals.Total.ToString();

Вам не нужно создавать экземпляр класса; на самом деле вы не можете, потому что это статично. new Просто используйте его напрямую. Все члены внутри статического класса также должны быть статическими. Строковый префикс не помечен как статический, поскольку const по своей природе неявно статичен.

Статический класс может находиться в любом месте вашего проекта. Он не обязательно должен быть частью Global.asax или какой-либо конкретной страницы, потому что он «глобальный» (или, по крайней мере, настолько близкий, насколько мы можем приблизиться к этой концепции в объектно-ориентированных терминах).

Вы можете создать столько статических классов, сколько захотите, и называть их как хотите.


Иногда программистам нравится группировать свои константы, используя вложенные статические классы. Например,

public static class Globals {
    public static class DbProcedures {
        public const string Sp_Get_Addresses = "dbo.[Get_Addresses]";
        public const string Sp_Get_Names = "dbo.[Get_First_Names]";
    }
    public static class Commands {
        public const string Go = "go";
        public const string SubmitPage = "submit_now";
    }
}

и получить к ним доступ так:

MyDbCommand proc = new MyDbCommand( Globals.DbProcedures.Sp_Get_Addresses );
proc.Execute();
//or
string strCommand = Globals.Commands.Go;
6 голосов
/ 15 марта 2010

Я второй ответ JDK: любой открытый статический член любого класса вашего приложения может рассматриваться как «глобальная переменная».

Однако обратите внимание, что это приложение ASP.NET, и поэтому оно является многопоточным контекстом для ваших глобальных переменных. Следовательно, вы должны использовать какой-то механизм блокировки при обновлении и / или чтении данных в / из этих переменных. В противном случае вы можете получить данные в поврежденном состоянии.

4 голосов
/ 25 ноября 2010

Вы можете создать базовый класс в своем приложении, который наследуется от System.Web.UI.Page. Пусть все ваши страницы наследуются от только что созданного базового класса. Добавьте свойство или переменную в базовый класс с помощью предполагаемого модификатора доступа, чтобы к нему можно было обращаться со всех ваших страниц в приложении.

0 голосов
/ 04 июля 2014
/// <summary>
/// Contains global variables for project.
/// </summary>
public static class GlobalVar
{
/// <summary>
/// Global variable that is constant.
/// </summary>
public const string GlobalString = "Important Text";

/// <summary>
/// Static value protected by access routine.
/// </summary>
static int _globalValue;

/// <summary>
/// Access routine for global variable.
/// </summary>
public static int GlobalValue
{
get
{
    return _globalValue;
}
set
{
    _globalValue = value;
}
}

/// <summary>
/// Global static field.
/// </summary>
public static bool GlobalBoolean;
}
0 голосов
/ 18 ноября 2013

Просто объявите переменную в начале класса.

например. для строковой переменной:

public partial class Login : System.Web.UI.Page
{
    public string sError;

    protected void Page_Load(object sender, EventArgs e)
    {
         //Page Load Code
    }
0 голосов
/ 15 марта 2010

Вы можете создать переменную с областью применения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...