同一个ASPX页面的所有实例是否共享相同的静态字段?

时间:2011-02-09 21:27:19

标签: asp.net static-members

让我们考虑这个页面的代码隐藏:

public partial class Products : Page
{
    private static SomeClass SharedField;

    public Product()
    {
        // ... Some logic
    }
}

所有Products页面实例共享相同的SharedField,我知道这是静态字段的基本概念。但在这种情况下,真的吗?所有用户都可以访问(并且不能拥有自己的实例)到网站级别的相同静态字段?

如果是这样,Web开发人员将使用哪些方面?或者这是非推荐的做法?

3 个答案:

答案 0 :(得分:2)

在网站的整个生命周期中,

SharedField将在一个实例中可用。

要了解更多信息,see this answer

答案 1 :(得分:2)

是的,所有用户都会有一个静态字段实例,但仅限于一个工作进程。如果你有网络农场/网络花园,他们每个人都有自己的静态实例。如果工作进程重新启动,您将获得一个新的静态实例。

您必须使用该共享字段周围的锁定来确保线程安全。

至于为何使用它,我不确定,我从不这样做。我可以给你的最好的例子是内置静态HttpContext.Current,它允许你访问请求,响应等。

答案 2 :(得分:0)

更好的做法是将对象存储在Application状态。

Application["MyObject"] = new SomeClass();