如果我的某个类具有在用户加载特定页面时设置的静态属性,那么该用户会话的静态值是否是唯一的?
换句话说,如果第二个用户然后加载页面并设置静态属性,每个用户是否都有不同的值,或者两者都使用第二个用户值?
答案 0 :(得分:15)
静态对应用程序域是唯一的,该应用程序域的所有用户将为每个静态属性共享相同的值。当你看到单词static时,请想“只会有一个这样的实例”。该实例持续多长时间是一个单独的问题,但简短的回答是它是可变的。
如果您想将特定于用户的值存储到Session State。
答案 1 :(得分:3)
除了鲍勃的回答之外,当然也有这样的例外:
public static object Item {
get { return HttpContext.Current.Session["some_key"]; }
}
答案 2 :(得分:2)
静态字段和属性在类的所有实例中共享。您的所有用户最终都会分享相同的价值。
值将存在,直到ASP.NET工作进程自行回收(定期发生)。
答案 3 :(得分:1)
不,这不是什么特别的因为它是asp.net。 ASP.NET本身只是一个常规的.NET程序集。如果要保存每个会话的内容,则应使用会话状态。如果没有,请注意,因为有许多线程可以访问您的静态数据。您应该阅读并了解线程,锁和竞争条件如何协同工作。