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,或者它具有不同的变量实例。
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
将得到相同的变量实例来回答您的问题。
这里已经讨论了更多关于这方面的内容。
您需要考虑会话,该会话将为访问站点的每个用户提供不同的值