静态属性如何在asp.net环境中工作?

时间:2010-10-26 18:30:45

标签: c# asp.net static properties

如果我的某个类具有在用户加载特定页面时设置的静态属性,那么该用户会话的静态值是否是唯一的?

换句话说,如果第二个用户然后加载页面并设置静态属性,每个用户是否都有不同的值,或者两者都使用第二个用户值?

4 个答案:

答案 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程序集。如果要保存每个会话的内容,则应使用会话状态。如果没有,请注意,因为有许多线程可以访问您的静态数据。您应该阅读并了解线程,锁和竞争条件如何协同工作。