Pergunta

Eu estou tendo um pouco de um problema estranho fazer com escopo de variáveis. Eu já declarou uma variável da seguinte maneira:

public partial class MyClass: System.Web.UI.Page
{
    protected static int MyGlobalVariable;

    protected void MyFunction()
    {
        MyGlobalVariable = 1;
    }
}

E esta multa obras sobre o funcionamento da minha página. No entanto, quando dois usuários estão usando a mesma página que eu estou achando que eu estou ficando mais de cruz. Se um usuário fosse para definir a variável a 5 e o outro uso então acessado essa variável seria definida como 5. Como posso definir a variável então ele só é acessível para o usuário que originalmente defini-lo?

Foi útil?

Solução

Se você declarar MyGlobalVariable como estático, em seguida, apenas uma instância do existirá para todas as instâncias da classe, assim como você disse, vários usuários, em várias instâncias do teh mesma página for acessar o mesmo valor.

quer declarar a int sem o modificador static ou se você precisar dele para persistir por esse usuário, considere o uso Viewstate (para escopo de página) ou Session (para escopo de sessão)

por exemplo.

protected int MyGlobalVariable
{
    get
    {
        return ViewState["MyGlobalVariable"] != null ? Convert.ToInt32(ViewState["MyGlobalVariable"] : 0;
    }
    set
    {
        ViewState["MyGlobalVariable"] = value;
    }
}

ou

protected int MyGlobalVariable
{
    get
    {
        return Session["MyGlobalVariable"] != null ? Convert.ToInt32(Session["MyGlobalVariable"] : 0;
    }
    set
    {
        Session["MyGlobalVariable"] = value;
    }
}

Outras dicas

Remova a declaração estática:

protected int MyGlobalVariable;

Mais sobre Variáveis ??estáticas

Nunca use variáveis ??estáticas em suas páginas.

variáveis ??

estáticos usar mesmo endereço de memória interna. Assim, todos os usuários receberão mesmo valor armazenado.

Bem, se você usar esta na necessidade de 'público' varilables. Então você vai precisar usar alguns truques como viewstate ou sessão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top