基于会话的ASP.Net中的静态属性将在所有用户之间共享?

时间:2014-07-07 17:13:36

标签: c# asp.net static-members

对于以下2个静态属性,是否会在ASP.net网站中的所有用户之间共享?似乎Property2将在ASP.Net网站的所有用户之间共享,但不确定Property1。

public static object Property1 {
get { return HttpContext.Current.Session["some_key"]; }
set {  HttpContext.Current.Session["some_key"] = value;}
}

public static object Property2 { get;set;}

2 个答案:

答案 0 :(得分:3)

Property1仅在用户当前会话的范围内。静态部分不会改变,因为它只是一个指向用户特定数据的会话包装。

Property2是一个常规静态属性,对所有用户都是相同的。

答案 1 :(得分:1)

Property1中的getter / setter方法将引用特定会话。由于Property2没有任何自定义getter / setter,因此底层私有变量存储在应用程序范围内,即将在ASP.Net网站的所有用户之间共享。

从学习的角度来看,这是看到差异的一个很好的例子。将静态转换为“非静态-y”的能力表明了编码的灵活性,但实际上你可能想避免调用Property1静态,主要是因为静态属性不遵循静态变量的行为一次你引用会话变量。它可能完全按照您的意愿工作,但其他开发人员在您之后或与您一起进入时可能会对它为何需要静态而感到困惑。每种情况都不同,但是如果你愿意的话,引用单个会话的静态属性似乎会产生意图冲突。