문제

변수 범위와 관련하여 약간 이상한 문제가 있습니다. 다음과 같은 방식으로 변수를 선언했습니다.

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

다른 팁

정적 선언 제거 :

protected int MyGlobalVariable;

정적 변수

페이지에서 정적 변수를 사용하지 마십시오.

정적 변수는 내부적으로 동일한 메모리 주소를 사용합니다. 따라서 모든 사용자는 동일한 값 저장을받습니다.

글쎄, 당신이 이것을 '공개'변형이 필요한 경우에 사용한다면. 그런 다음 ViewState 또는 Session과 같은 몇 가지 트릭을 사용해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top