Variables globales dans c#.net

Comment puis-je 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îtresse peut-être) et d'accéder à cette variable depuis n'importe quelle page.

Je ne veux utiliser ni cache ni sessions.

Je pense que je dois utiliser mondiale.asax. Toute aide?

41
demandé sur JavaAndCSharp 2010-03-15 09:21:42

6 réponses

Utilisez une classe statique publique et accédez - La 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 ça, à partir de la page principale ou n'importe où:

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

Vous N'avez pas besoin de faire 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 à l'intérieur d'une classe statique doivent également être statiques. Le préfixe de chaîne n'est pas marqué static car const est implicitement statique par nature.

La classe statique peut être n'importe où dans votre projet. Il n'a pas à être de la partie de Mondiale.asax ou n'importe quelle page particulière parce qu'elle est "globale" (ou au moins aussi proche que possible de ce 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 ceci:

MyDbCommand proc = new MyDbCommand( Globals.DbProcedures.Sp_Get_Addresses );
proc.Execute();
//or
string strCommand = Globals.Commands.Go;
98
répondu John K 2010-03-18 22:55:56

Je seconde la réponse de jdk: tout membre statique public de n'importe quelle classe de votre application peut être considéré comme une "variable globale".

Cependant, notez qu'il s'agit d'un ASP.NET application, et en tant que tel, c'est un contexte multi-thread 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, vous pourriez obtenir vos données dans un état corrompu.

4
répondu Ron Klein 2010-03-15 06:31:28

Vous pouvez créer une classe de base dans votre application qui hérite du système.Web.INTERFACE.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 proposé, de sorte qu'il sera accessible à partir de toutes vos pages de l'application.

3
répondu Ghyath Serhal 2010-11-25 07:57:08

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

0
répondu Ameer Deen 2010-03-15 06:36:41
/// <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
répondu Morteza 2014-07-04 16:09:37

Il suffit de déclarer la variable au début d'une classe.

Par exemple pour la variable de chaîne:

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

    protected void Page_Load(object sender, EventArgs e)
    {
         //Page Load Code
    }
-3
répondu Sagar Patil 2013-11-18 15:29:32