全局变量被C#覆盖

时间:2012-12-18 15:02:47

标签: c#

我设置了一堆静态变量

public class globalvars
{
      /// <summary>
      /// Is user logged in
      /// </summary>
      public static string strUserName
      {
          get;
          set;
      }
}

然后在整个项目中使用它们

public class logintowebsite : CustomerMappings
{


  public static void QuickLoginCheck()
   {
       try
       {
           LoginDetails user = ActiveSubsite.Instance.SubsiteSettings.CurrentUser;
           globalvars.strUserName = "Bert";

       }
       catch
       {
           globalvars.strUserName = "Ernie";
       }

}

麻烦的是,当两个用户同时使用该页面时,第一个用户的详细信息会被第二个用户的详细信息覆盖,因为它们已被替换。

为什么会出现这种情况的任何想法。

3 个答案:

答案 0 :(得分:6)

  

当两个用户同时使用该页面时,第一个用户的详细信息会被第二个用户的详细信息覆盖,因为它们已被替换。   任何想法可能会发生这种情况。

是的,因为它们是static

当您不希望在所有请求之间共享静态变量时,不要在ASP.NET中使用静态变量(因为每个请求都是不同的线程)。

您可以使用Session代替。

答案 1 :(得分:2)

这是singleton pattern的情况,您必须使用会话变量/ cookies /其他缓存模式使其对每个用户都是唯一的

答案 2 :(得分:1)

strUserName是静态的。这意味着所有strUserName

只有一个globalvars

通过声明static某些内容,您可以调用类似SomeClass.SomeStaticVarName的内容 - 不必创建SomeClass的实例来访问SomeStaticVarName

当我在学校时,我一直在努力学习静态概念,如果你想要一个更好的例子,请告诉我。