我对变量范围有一点奇怪的问题。我已通过以下方式声明了一个变量:
public partial class MyClass: System.Web.UI.Page
{
protected static int MyGlobalVariable;
protected void MyFunction()
{
MyGlobalVariable = 1;
}
}
这适用于我的页面的工作。然而,当两个用户使用同一页面时,我发现我正在越过。如果一个用户将变量设置为5而另一个用户则访问该变量,则将其设置为5.如何设置变量以使其仅可由最初设置的用户访问?
答案 0 :(得分:6)
如果您将MyGlobalVariable
声明为静态,那么对于该类的所有实例,只有一个实例存在,正如您所说,多个用户,在同一页面的多个实例上将访问相同的值
要么在没有static
修饰符的情况下声明int,要么为了保持该用户的持久性,请考虑使用Viewstate
(对于页面范围)或Session
(对于会话范围)< / p>
e.g。
protected int MyGlobalVariable
{
get
{
return ViewState["MyGlobalVariable"] != null ? Convert.ToInt32(ViewState["MyGlobalVariable"] : 0;
}
set
{
ViewState["MyGlobalVariable"] = value;
}
}
或
protected int MyGlobalVariable
{
get
{
return Session["MyGlobalVariable"] != null ? Convert.ToInt32(Session["MyGlobalVariable"] : 0;
}
set
{
Session["MyGlobalVariable"] = value;
}
}
答案 1 :(得分:2)
答案 2 :(得分:0)
不要在页面中使用STATIC变量。
静态变量在内部使用相同的内存地址。因此,所有用户都将获得相同的值。
好吧,如果你使用这个需要'公共'变量。然后你需要使用一些技巧,比如viewstate或session。