web-dev-qa-db-fra.com

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 depuis n'importe quelle page. 

Je ne veux utiliser ni cache ni sessions.

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

43
scatman

Utilisez une classe statique publique et accédez-y où que vous soyez. 

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

utilisé comme tel, depuis 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 parce que c'est statique. new Il suffit de l'utiliser directement. Tous les membres d'une classe statique doivent également être statiques. Le préfixe de chaîne n'est pas marqué comme statique, car const est implicitement statique par nature.

La classe statique peut être n'importe où dans votre projet. Il n'est pas nécessaire que cela fasse partie de Global.asax ou d'une page particulière, car elle est "globale" (ou du moins aussi proche que possible du concept en termes orientés objet)

Vous pouvez créer autant de classes statiques que vous le souhaitez et les nommer comme vous le souhaitez.


Parfois, les programmeurs aiment regrouper leurs constantes en utilisant des classes statiques imbriquées. 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 y accéder comme suit:

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

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 multi-threaded 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.

6
Ron Klein

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 que toutes les pages de l'application puissent y accéder.

4
Ghyath Serhal

Vous pouvez créer une variable avec un domaine d'application

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