Подтвердить что ты не робот

Глобальные переменные в С#.net

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

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

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

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

4b9b3361

Ответ 1

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

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;

Ответ 2

I второй ответ jdk: любой публичный статический член любого класса вашего приложения можно рассматривать как "глобальную переменную".

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

Ответ 3

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

Ответ 5

/// <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;
}

Ответ 6

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

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

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

    protected void Page_Load(object sender, EventArgs e)
    {
         //Page Load Code
    }