2011-02-09 14 views
1

让我们考虑一下这个页面的代码隐藏:同一个ASPX页面的所有实例是否共享相同的静态字段?

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

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

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

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

回答

2

是的,所有用户都会有一个该静态字段的实例,但只能在单个工作进程中执行。如果你有网络农场/网络园,他们将各自拥有自己的静态实例。如果工作进程重新启动,您将获得一个新的静态实例。

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

至于为什么要使用它,我不知道,我从来没有这样做。我可以给你的最好的例子是内置的静态HttpContext.Current,它允许你访问请求,响应等。

+0

`但仅限于单一的工作进程...`+1 – 2011-02-09 21:50:30

2

SharedField将在网站的整个生命周期的一个实例中可用。

要更多地了解它,see this answer

0

一个更好的做法是将你的对象存储在应用程序状态。

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

+0

不管你信不信,微软表示,使用静态代替。 http://stackoverflow.com/questions/4879023/what-is-the-life-span-of-a-field-in-a-static-class/4879119#4879119 – Greg 2011-02-09 21:39:50

相关问题