Asp.Net中的静态变量Behavior

本文关键字:变量 Behavior 静态 Net Asp | 更新日期: 2023-09-27 18:09:11

我有一个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,或者它具有不同的变量实例。

Asp.Net中的静态变量Behavior

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构造函数的参考,请参见此处。

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

静态变量等于全局变量,全局变量可访问所有用户?如果用户A将其设置为true,用户B是否可以将该值作为True,或者它具有不同的变量实例。

只有当您的在池上的一个工作流程下运行您的站点时,才会出现这种行为。

如果您的池有多个工作进程,那么每个进程都有其静态值,并且您不知道每个请求和每个用户都有哪个进程。和过程在一起他们是不沟通的。

假设你有一个有4个工作流程的池。

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

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

静态变量只创建一次。所以userB将得到相同的变量实例来回答您的问题。

这里已经讨论了更多关于这方面的内容。

您需要考虑会话,该会话将为访问站点的每个用户提供不同的值