means - variables estáticas c#
Alcance de la variable estática en aplicaciones web ASP.NET multiusuario (4)
¿Las variables estáticas conservan sus valores en las sesiones de usuario?
Sí, es por eso que debes tener MUCHO cuidado cuando usas variables estáticas en una aplicación web. Se ejecutará en problemas de concurrencia ya que más de un subproceso que atiende una solicitud puede modificar el valor de la variable.
Si bien esto funciona en un entorno de un solo usuario, lo que sucede si hay 2 usuarios conectados simultáneamente desde dos computadoras, el usuario 1 establece el valor en 100, luego el usuario 2 establece el valor en 200. después de que el usuario 1 invoca el botón Obtener valor. ¿Qué verá él como el valor?
El usuario verá 200 después.
¿Las variables estáticas conservan sus valores en las sesiones de usuario?
Tengo una aplicación web ASP.NET donde tengo dos botones. Una para establecer el valor de la variable estática, otra para mostrar el valor de la variable estática.
namespace WebApplication1
{
public partial class WebForm1 : System.Web.UI.Page
{
public static int customerID;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void ButtonSetCustomerID_Click(object sender, EventArgs e)
{
customerID = Convert.ToInt32(TextBox1.Text);
}
protected void ButtonGetCustomerID_Click(object sender, EventArgs e)
{
Label1.Text = Convert.ToString(customerID);
}
}
}
Si bien esto funciona en un entorno de un solo usuario, lo que sucede si hay 2 usuarios conectados simultáneamente desde dos computadoras, el usuario 1 establece el valor en 100, luego el usuario 2 establece el valor en 200. después de que el usuario 1 invoca el botón Obtener valor. ¿Qué verá él como el valor?
Esto funcionaría para usted (tenga en cuenta que debe manejar valores nulos / -1):
public static int customerID
{
get { return session["customerID"] == null? -1 : (int)session["customerID"]; }
set { session["customerID"] = value; }
}
No utilice estática para la propiedad, entonces funciona:
public int customerID
{
get { return Session["customerID"] == null? -1 : (int)Session["customerID"]; }
set { Session["customerID"] = value; }
}
El alcance de las variables estáticas es el nivel de aplicación.
Si almacena algo en variables estáticas, entonces está haciendo algo incorrecto.
Si un usuario guarda los datos, al mismo tiempo que otro usuario accedió a la misma página, también obtendrá los mismos datos. Así que mejor puedes almacenar los valores en Sesiones .