문제
변수 범위와 관련하여 약간 이상한 문제가 있습니다. 다음과 같은 방식으로 변수를 선언했습니다.
public partial class MyClass: System.Web.UI.Page
{
protected static int MyGlobalVariable;
protected void MyFunction()
{
MyGlobalVariable = 1;
}
}
그리고 이것은 내 페이지의 작업에서 잘 작동합니다. 그러나 두 사용자가 같은 페이지를 사용하는 경우 교차로가되고 있음을 알게됩니다. 한 사용자가 변수를 5로 설정하고 다른 사용이 변수에 액세스 한 경우 5로 설정됩니다. 원래 설정 한 사용자에게만 액세스 할 수 있도록 변수를 어떻게 설정할 수 있습니까?
해결책
당신이 선언한다면 MyGlobalVariable
정적으로는 클래스의 모든 인스턴스에 대해 하나의 인스턴스 만 존재하므로 여러 사용자가 동일한 페이지의 여러 인스턴스에서 동일한 값에 액세스 할 수 있습니다.
int가없이 int를 선언하십시오 static
수정 자 또는 해당 사용자를 위해 지속되기 위해 필요한 경우 사용을 고려하십시오. Viewstate
(페이지 범위의 경우) 또는 Session
(세션 범위)
예를 들어
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;
}
}
다른 팁
페이지에서 정적 변수를 사용하지 마십시오.
정적 변수는 내부적으로 동일한 메모리 주소를 사용합니다. 따라서 모든 사용자는 동일한 값 저장을받습니다.
글쎄, 당신이 이것을 '공개'변형이 필요한 경우에 사용한다면. 그런 다음 ViewState 또는 Session과 같은 몇 가지 트릭을 사용해야합니다.
제휴하지 않습니다 StackOverflow