45 votes

Variables globales dans c # .net

Comment définir une variable globale dans une application Web C #?

Ce que je veux faire est de définir une variable sur une page (page maître peut-être) et accéder à cette variable à partir de n'importe quelle page.

Je ne veux utiliser ni cache ni sessions.

Je pense que je dois utiliser global.asax. De l'aide?

104voto

John K Points 13695

Utiliser un public static de la classe et y accéder à partir de n'importe où.

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

utilisé comme, à partir de la page maître ou n'importe où:

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

Vous n'avez pas besoin de créer une instance de la classe; en fait, vous ne pouvez pas car il est statique. new Seulement de l'utiliser directement. Tous les membres à l'intérieur d'une classe statique doit également être statique. La chaîne de Préfixe n'est pas marquée statique car const est implicitement statique par nature.

La classe statique peut être n'importe où dans votre projet. Il n'a pas à être une partie de la Global.asax ou une page particulière parce que c'est "global" (ou au moins aussi proche que nous pouvons obtenir de ce concept orienté objet conditions.)

Vous pouvez faire autant de classes statiques que vous le souhaitez et de les nommer ce que vous voulez.


Parfois, les programmeurs comme pour le groupe de leurs constantes en utilisant des classes statiques. Par exemple,

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

et d'y accéder de la sorte:

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

6voto

Ron Klein Points 3409

Deuxième réponse de jdk: tout membre statique public de n’importe quelle classe de votre application peut être considéré comme une "variable globale".

Toutefois, notez qu'il s'agit d'une application ASP.NET et que, par conséquent, il s'agit d'un contexte multithread pour vos variables globales. Par conséquent, vous devez utiliser un mécanisme de verrouillage lorsque vous mettez à jour et / ou lisez les données vers / depuis ces variables. Sinon, vos données pourraient être corrompues.

4voto

Ghyath Serhal Points 3458

Vous pouvez créer une classe de base dans votre application qui hérite de System.Web.UI.Page. Laissez toutes vos pages hériter de la classe de base nouvellement créée. Ajoutez une propriété ou une variable à votre classe de base avec le modificateur d’accès prévu, de sorte qu’elle soit accessible à partir de toutes vos pages de l’application.

0voto

Morteza Points 26
/// <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;
}

0voto

Ameer Deen Points 364

Vous pouvez créer une variable avec une portée d'application

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X