2012-12-18 162 views
0

我给自己定了一堆静态变量全局变量覆写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"; 
     } 

} 

麻烦的是,当两个用户使用的页面在同时第一个用户的细节被第二个用户的细节覆盖,因为它们被替换。

任何想法,为什么这可能发生。

回答

1

strUserName是静态的。意义仅仅存在一个strUserName所有globalvars

通过声明的东西static你可以调用像SomeClass.SomeStaticVarName - 没有SomeClass实例必须创建去SomeStaticVarName

当我在学校里,我的理念奋斗的静态,让我知道你是否想要一个更好的例子。

6

当两个用户同时使用该页面时,第一个用户的细节被第二个用户的细节覆盖,因为它们被替换。 任何想法,为什么这可能会发生。

是的,因为他们是static

不要在ASP.NET中使用静态变量(我假设)当你不想在所有请求之间共享它们,因为每个请求都是不同的线程。您可以改用Session

+0

感谢。我试过会话,但并不总是保存所有设备上的变量。 – user956731

2

这是singleton pattern的情况下,你必须使用会话变量/饼干/其他缓存模式,使其具有唯一为每个用户

+0

我赞同使用单例模式。 –