我有一个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,或者它具有不同的变量实例。
答案 0 :(得分:3)
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
构造函数的参考,请参阅here。
答案 1 :(得分:2)
所以想知道Asp.Net中静态变量的行为 C#。
是静态变量,等于可访问的全局变量 所有用户?如果用户A将其设置为true,则用户B可以将该值设置为 是或它有不同的变量实例。
只有当你的在一个工作流程下运行你的网站
时,行为才会如此。如果您的池有多个工作进程,那么每个进程都有其静态值,并且您不知道每个用户为每个请求指定了什么进程。并且一起处理他们不沟通。
因此,假设您有一个包含4个工作流程的池。
UserA要求页面,重放过程1并将静态值设置为A.
UserB要求页面,进程1重放,静态值为A.
UserA要求页面,重放过程2并且未设置静态值。
等等。
更多关于这个问题:
Lifetime of ASP.NET Static Variable
Where are static variables stored in asp.net aspx page
Using static variables instead of Application state in ASP.NET
Static methods on ASP.NET web sites
Asp.net static object appears sometimes as non global
答案 2 :(得分:1)
静态变量只创建一次。所以userB
会得到相同的变量实例来回答你的问题。
有关此问题的更多内容已经讨论here。
答案 3 :(得分:0)
您需要考虑为每个访问该网站的用户提供不同价值的会话