繁体   English   中英

Asp.Net中的静态变量行为

[英]Static variable Behaviour in Asp.Net

我有一个OperationHelper类,如下所示:

public class OperationHelper
    {
        /// <summary>
        /// Gets or sets the Add Operation value
        /// </summary>
        public static bool AddOperation { get; set; }

        /// <summary>
        /// Gets or sets the Edit Operation value
        /// </summary>
        public static bool EditOperation { get; set; }

        /// <summary>
        /// Gets or sets the Delete Operation value
        /// </summary>
        public static bool DeleteOperation { get; set; }

        /// <summary>
        /// Gets or sets the Select Operation value
        /// </summary>
        public static bool SelectOperation { get; set; }
    }

在每个请求中,将重新分配该值。 当我在本地运行时,它可以正常工作。 但是,当我发布代码时,某些值未分配或不起作用,因为它应该起作用。

所以想知道C#中Asp.Net中静态变量的行为。

静态变量等于所有用户都可以访问的全局变量吗? 如果用户A将其设置为true,则用户B可以将该值获取为True还是具有不同的变量实例。

static变量的行为是,一旦到达它们所属的代码,就会立即创建它们。 要解决您的问题,请为您的类考虑一个static constructor ,以根据需要正确初始化所有值

public class OperationHelper
{
    /// <summary>
    /// Gets or sets the Add Operation value
    /// </summary>
    public static bool AddOperation { get; set; }

    /// <summary>
    /// Gets or sets the Edit Operation value
    /// </summary>
    public static bool EditOperation { get; set; }

    /// <summary>
    /// Gets or sets the Delete Operation value
    /// </summary>
    public static bool DeleteOperation { get; set; }

    /// <summary>
    /// Gets or sets the Select Operation value
    /// </summary>
    public static bool SelectOperation { get; set; }

    static OperationHelper() {
    //initialize your static variables here
    }
}

有关static构造函数的参考,请参见此处

所以想知道C#中Asp.Net中静态变量的行为。

静态变量等于所有用户都可以访问的全局变量吗? 如果用户A将其设置为true,则用户B可以将该值获取为True还是具有不同的变量实例。

仅当您在池中的一个工作进程下运行站点时 ,此行为才是这样。

如果您的池有多个工作进程,则每个进程都具有其静态值 ,并且您不知道为每个请求,每个用户指定了哪个进程。 和他们在一起处理不交流。

因此,假设您有一个包含4个工作流程的池。

UserA请求一个页面,正在重播进程1,并将静态值设置为A。
UserB请求一个页面,进程1正在重播,静态值为A。
UserA请求页面,正在重播进程2,并且未设置静态值。

等等。 有关此主题的更多信息: ASP.NET静态变量的生命周期
静态变量存储在asp.net aspx页中的哪里
在ASP.NET中使用静态变量代替应用程序状态
ASP.NET网站上的静态方法
Asp.net静态对象有时显示为非全局对象

静态变量仅创建一次。 因此userB将获得该变量的相同实例来回答您的问题。

这里已经讨论了更多。

您需要考虑使用会话,以便为每个访问该网站的用户提供不同的价值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM