wake-up-neo.com

Globale Variablen in c # .net

Wie kann ich eine globale Variable in einer C # Webanwendung festlegen?

Was ich tun möchte, ist, eine Variable auf einer Seite festzulegen (möglicherweise die Masterseite) und von jeder Seite aus auf diese Variable zuzugreifen. 

Ich möchte weder Cache noch Sitzungen verwenden.

Ich denke, dass ich global.asax verwenden muss. Irgendeine Hilfe?

43
scatman

Verwenden Sie eine öffentliche statische Klasse, und greifen Sie von überall darauf zu. 

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

wird so verwendet, von der Masterseite oder von überall:

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

Sie müssen keine Instanz der Klasse erstellen. Sie können es nicht, weil es statisch ist. new Verwenden Sie es einfach direkt. Alle Member innerhalb einer statischen Klasse müssen ebenfalls statisch sein. Der String Prefix ist nicht als statisch gekennzeichnet, da const von Natur aus implizit statisch ist.

Die statische Klasse kann sich irgendwo in Ihrem Projekt befinden. Sie muss nicht Teil von Global.asax oder einer bestimmten Seite sein, da sie "global" ist (oder zumindest so nahe, wie wir dieses Konzept objektorientiert erreichen können.)

Sie können beliebig viele statische Klassen erstellen und benennen, wie Sie möchten.


Manchmal möchten Programmierer ihre Konstanten mit verschachtelten statischen Klassen gruppieren. Zum Beispiel,

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

und greife auf sie zu:

MyDbCommand proc = new MyDbCommand( Globals.DbProcedures.Sp_Get_Addresses );
proc.Execute();
//or
string strCommand = Globals.Commands.Go;
102
John K

Zweitens Antwort von jdk: Jedes öffentliche statische Member einer Klasse Ihrer Anwendung kann als "globale Variable" betrachtet werden.

Beachten Sie jedoch, dass dies eine ASP.NET-Anwendung ist und daher ein Multithread - Kontext für Ihre globalen Variablen ist. Daher sollten Sie einen Sperrmechanismus verwenden, wenn Sie die Daten aktualisieren und/oder aus diesen Variablen lesen. Andernfalls können Ihre Daten beschädigt werden.

6
Ron Klein

Sie können in Ihrer Anwendung eine Basisklasse erstellen, die von System.Web.UI.Page ..__ erbt. Lassen Sie alle Ihre Seiten von der neu erstellten Basisklasse erben. Fügen Sie Ihrer Basisklasse eine Eigenschaft oder eine Variable mit dem vorgeschlagenen Zugriffsmodifizierer hinzu, sodass auf alle Ihre Seiten in der Anwendung zugegriffen werden kann.

4
Ghyath Serhal

Sie können eine Variable mit einem Anwendungsbereich erstellen

0
Ameer Deen
/// <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
Morteza