C# 静态变量的生命周期

C# 静态变量的生命周期,c#,asp.net,.net,wpf,static-members,C#,Asp.net,.net,Wpf,Static Members,有什么方法可以设置静态变量的生命周期吗?比如:在重置之前,静态变量的生命周期保持多久?我希望有一个可以应用的属性。在应用程序的生命周期内保存一个静态变量,并在所有线程之间共享。它仅在应用程序重新启动时重置(例如web.config更改) 如果这是为了缓存之类的东西,我建议设置一个计时器以定期更新值。静态成员与类型本身关联,而不是与类型的实例关联。因此,它们的生命周期仅限于创建的时间和顺序,并且不会通过类型的实例进行“重置”。静态变量中的值的生命周期与包含AppDomain的值的生命周期相同。例如

有什么方法可以设置静态变量的生命周期吗?比如:在重置之前,静态变量的生命周期保持多久?我希望有一个可以应用的属性。

在应用程序的生命周期内保存一个静态变量,并在所有线程之间共享。它仅在应用程序重新启动时重置(例如web.config更改)


如果这是为了缓存之类的东西,我建议设置一个计时器以定期更新值。

静态成员与类型本身关联,而不是与类型的实例关联。因此,它们的生命周期仅限于创建的时间和顺序,并且不会通过类型的实例进行“重置”。

静态变量中的值的生命周期与包含AppDomain的值的生命周期相同。例如,如果您获得一个新的AppDomain(因为IIS应用程序重新启动),您将获得静态变量的一个新副本。

在我的情况下,由于我使用ASP.NET,所讨论的项在一个请求的生命周期中应该保持“活动”,因此考虑过它之后,HttpContext[“Items”]集合将是最好的。例如,如果:

    private static SomeObject _books;
    protected static SomeObject Books
    {
        get
        {
            if (_books == null) {
                _books = new SomeObject();
            }
            return _books ;
        }
    }

    protected static SomeObject AVariable
    {
        get
        {
            SomeObject books = HttpContext.Current.Items["books"] as SomeObject; 
            if (books == null) {
                books = new SomeObject();
                HttpContext.Current.Items["books"] = books;
            }
            return books;
        }
    }

你是什么意思(变量不会被重置-你的应用程序会重置)和?你能给我们一个使用这个静态变量的上下文吗?一个
静态
变量就是一个变量。在您决定重置它之前,它不会“被重置”。@dasblinkenlight:正确,但在ASP.NET中,当应用程序(重新)启动时(例如,当应用程序池回收时),它也会自动重置。您已将其标记为服务器端框架和桌面框架。应用程序生命周期在这两个上下文中是完全不同的。你问的实际情况是什么?我要提醒你不要这样做。如果此变量存在问题,这可能会使调试变得非常困难。特别是如果有其他开发人员在后面进行故障排除。你最好使用一个实例变量。我同意这可能很难,这将取决于问题的背景。如果可以使用实例变量,那么我同意这会简单得多。我的答案是试图回答如何使一个静态变量过期——如果有一个更简单的选项可用,那么我会选择那个选项。