Variables globales en c # .net

¿Cómo puedo establecer una variable global en una aplicación web C #?

Lo que quiero hacer es establecer una variable en una página (tal vez una página maestra) y acceder a esta variable desde cualquier página.

No quiero usar caché ni sesiones.

Creo que tengo que usar global.asax. ¿Alguna ayuda?

Use una clase pública estática y acceda a ella desde cualquier lugar.

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

utilizado como tal, desde la página maestra o en cualquier lugar:

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

No necesita hacer una instancia de la clase; de hecho, no puedes porque es estático. new Solo úsalo directamente. Todos los miembros dentro de una clase estática también deben ser estáticos. El Prefijo de cadena no está marcado como estático porque const es implícitamente estático por naturaleza.

La clase estática puede estar en cualquier lugar de su proyecto. No tiene que ser parte de Global.asax o de ninguna página en particular porque es “global” (o al menos lo más cercano que podamos llegar a ese concepto en términos orientados a objetos).

Puede crear tantas clases estáticas como desee y ponerles el nombre que desee.


A veces los progtwigdores les gusta agrupar sus constantes mediante el uso de clases estáticas anidadas. Por ejemplo,

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

y acceda a ellos de esta manera:

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

I segunda respuesta de jdk: cualquier miembro público estático de cualquier clase de su aplicación se puede considerar como una “variable global”.

Sin embargo, tenga en cuenta que esta es una aplicación ASP.NET, y como tal, es un contexto de subprocesos múltiples para sus variables globales. Por lo tanto, debe usar algún mecanismo de locking cuando actualice y / o lea los datos a / desde estas variables. De lo contrario, podría obtener sus datos en un estado dañado.

Puede crear una clase base en su aplicación que hereda de System.Web.UI.Page. Deje que todas sus páginas hereden de la clase base recién creada. Agregue una propiedad o una variable a su clase base con el modificador de acceso previsto, de modo que se acceda desde todas sus páginas en la aplicación.

Puede crear una variable con un scope de aplicación

 ///  /// Contains global variables for project. ///  public static class GlobalVar { ///  /// Global variable that is constant. ///  public const string GlobalString = "Important Text"; ///  /// Static value protected by access routine. ///  static int _globalValue; ///  /// Access routine for global variable. ///  public static int GlobalValue { get { return _globalValue; } set { _globalValue = value; } } ///  /// Global static field. ///  public static bool GlobalBoolean; } 

Simplemente declare la variable al comienzo de una clase.

por ejemplo, para la variable de cadena:

 public partial class Login : System.Web.UI.Page { public string sError; protected void Page_Load(object sender, EventArgs e) { //Page Load Code }