2009-04-30 71 views
3

我對變量作用域有點奇怪的問題。我已經通過以下方式聲明瞭變量:ASP.Net變量的作用域

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

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

而且這對我的頁面工作正常工作。但是,當兩個用戶使用相同的頁面時,我發現我正在交叉。如果一個用戶將變量設置爲5,另一個用戶訪問該變量,那麼它將被設置爲5.我如何設置變量,使其只能由最初設置變量的用戶訪問?

回答

6

如果您聲明MyGlobalVariable爲靜態,那麼對於該類的所有實例,只有一個實例存在,如您所說,多個用戶在同一頁的多個實例中將訪問相同的值。

要麼申報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; 
    } 
} 
0

千萬不要使用靜態變量在你的頁面。

靜態變量在內部使用相同的內存地址。所以所有的用戶都會得到相同的值。

那麼,如果你使用這需要'公共'varibles。那麼你將需要使用一些技巧,如視圖狀態或會話。

+4

「永遠不要使用靜態變量」 ......除非那是預期的行爲... – 2009-04-30 10:06:43

+0

noob問題:如何使用公共變量? – 2009-06-22 16:06:11