質問
変数のスコープに関連する奇妙な問題が少しあります。次の方法で変数を宣言しました。
public partial class MyClass: System.Web.UI.Page
{
protected static int MyGlobalVariable;
protected void MyFunction()
{
MyGlobalVariable = 1;
}
}
そして、これは私のページの動作でうまく機能します。しかし、2人のユーザーが同じページを使用しているとき、私はクロスオーバーしていることに気付きます。あるユーザーが変数を5に設定し、他のユーザーがその変数にアクセスした場合、その変数は5に設定されます。変数を設定すると、最初に設定したユーザーのみがアクセスできるようになります。
解決
MyGlobalVariable
をstaticとして宣言すると、クラスのすべてのインスタンスに対してそのインスタンスが1つだけ存在するため、同じページの複数のインスタンス上の複数のユーザーがアクセスします同じ値。
static
修飾子なしでintを宣言するか、そのユーザーに対して永続化する必要がある場合は、 Viewstate
(ページスコープ用)または Session
(セッションスコープ用)
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;
}
}
他のヒント
ページで静的変数を使用しないでください。
静的変数は、内部で同じメモリアドレスを使用します。したがって、すべてのユーザーに同じ値が保存されます。
まあ、これを「パブリック」バリアブルが必要な場合に使用します。次に、ビューステートやセッションなどのトリックを使用する必要があります。
所属していません StackOverflow