最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
asp.net 页面static变量问题
时间:2022-06-25 04:56:41 编辑:袖梨 来源:一聚教程网
asp教程.net 页面static变量问题
static变量只在第一次使用时才初始化(可能早于也可能晚于Main函数).c中的全局变量存在早于main函数.
static有修饰限定词,全局变量无.
static的机制复杂得多,其初始化次序有可能引起竞争问题(比如两个类的static成员的初始化都依赖对方时),全局变量不存在这些问题.
测试代码如下:
View Code public partial class _Default : System.Web.UI.Page
{
private static string str;
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
str = "这是个static变量赋值"+DateTime.Now;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
this.TextBox1.Text = str;
}
}
我用火狐连续打开3个页面点击按钮显示的值都是同样的(把连接赋值到IE下值就变了)
View Code public partial class _Default : System.Web.UI.Page
{
//private static string str;
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
//str = "这是个static变量赋值"+DateTime.Now;
ViewState["Key"] = "这是个static变量赋值" + DateTime.Now;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
this.TextBox1.Text = ViewState["Key"].ToString();
}
}
这种情况下,需要的极有可能就是个ViewState或者是Session。
Application与static变量
Application是通过一个集合保存所有的对象。
强类型:
Application中保存的是object,对对象的保存和使用需要作cast动作。对于值类型更需要Box&UnBox。对性能的影响较大。
而static变量是强类型的对象。
改为ViewState正常
非泛型类并且非ThreadStatic的static变量在一个AppDomain中只存在一份
换而言之,不同AppDomain里面的同一个static变量可以不同
泛型类的static变量是每个具体类型一个
ThreadStatic的static变量是每个线程一个
至于能不能访问,要看变量的访问修饰符和所在类的访问修饰符
static变量不是一直存在的,clr会在使用这个变量之前帮你准备好
因此在使用这个变量之前并不知道它是否存在,唯一可以知道的是在使用时,它一定存在(当然可能是null)
至于什么时候clr准备好这个静态变量,又有BeforeFieldInit和非BeforeFieldInit的区别
相关文章
- 《尼尔:机械纪元》武器黑之倨傲属性及特殊能力介绍 11-15
- 《尼尔:机械纪元》机械生命体的枪获得方法介绍 11-15
- 《尼尔:机械纪元》武器机械生命体的枪属性及特殊能力介绍 11-15
- 《尼尔:机械纪元》天使之圣翼获得方法介绍 11-15
- 《尼尔:机械纪元》武器天使之圣翼属性及特殊能力介绍 11-15
- 《尼尔:机械纪元》武器恶魔之秽牙属性及特殊能力介绍 11-15