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的区别
敢达决战官方正版 安卓版v6.7.9
下载敢达决战 安卓版v6.7.9
下载像素火影骨架佐助 (Perseverance Fire Shadow)手机版v1.16
下载要塞英雄 安卓版v33.20.0-39082670-Android
下载梦想城镇vivo最新版本 安卓版v12.0.1
梦想城镇vivo版是这款卡通风模拟经营类手游的渠道服版本,玩
怦然心动的瞬间 安卓版v1.0
怦然心动的瞬间是一款真人向的恋爱互动游戏,在游戏中玩家将扮演
曼尼汉堡店游戏 安卓版v1.0.3
曼尼汉堡店是一款非常好玩的精品恐怖类型冒险游戏,在这款游戏中
现代总统模拟器去广告版 安卓版v1.0.46
现代总统模拟器是一款休闲养成类游戏,可能对于不少的玩家来说都
现代总统模拟器付费完整版 安卓版v1.0.46
现代总统模拟器高级版在商店是需要付费的,相对于普通版本,高级