c#静态成员问题
本文关键字:成员问题 静态 | 更新日期: 2023-09-27 18:08:05
例如,我有如下静态类:
public static class f
{
public static bool IS_GUEST = (HttpContext.Current.Session["uid"] == null);
public static bool IS_ADMIN = (HttpContext.Current.Session["admin"] != null);
//...
现在,如果我使用IS_GUEST检查用户是否为Guest,即使用户不是Guest(会话"uid"确实存在),我也总是得到true。对于IS_ADMIN,无论如何,我总是得到false。会话是在我调用IS_GUEST和IS_ADMIN之前创建的,如果我手动检查它(HttpContext.Currest.Session[something]
),它工作得很好。那么问题是什么呢?
静态初始化器在代码中的任何方法之前运行。所以很可能HttpContext.Current.Session在初始化字段时还没有初始化。将它们更改为属性,一切都应该按预期工作。
public static class f
{
public static bool IS_GUEST
{
get
{
return (HttpContext.Current.Session["uid"] == null);
}
}
public static bool IS_ADMIN
{
get
{
return (HttpContext.Current.Session["admin"] != null);
}
}
您必须在来宾/管理员登录时设置这些值。
除了DeCaf所说的,静态字段在应用程序域中的所有线程之间共享。
在该应用程序域中运行的所有请求将在给定时间点共享相同的值。
将会话中的静态变量值存储在静态变量中不是一个好主意。首先,session中的值可以改变,但是静态变量不会改变。
可能你正在找这个:
public static class f
{
public static bool IsGuest
{
get
{
return HttpContext.Current.Session["uid"] == null;
}
}
public static bool IsAdmin
{
get
{
return HttpContext.Current.Session["admin"] != null;
}
}
//...
}
在这种情况下,您可以访问静态变量,如F.IsGuest
,您将获得最新的信息。