我的程序,到底被编译了几次!?(.net运行机理,谢谢!)

flashmagic 2005-05-12 04:10:11
是这样的。我在页面内定义一个int变量i.在Page_Load进行初始化If(!Page.IsPostBack)i=5;。我又定义了一个button.当点击的时候i++。然后用一个label显示出来。可是。我并不能实现每点击一次数值就加一。而是等于1。因为返回给服务器后。首先调用Page_Load函数,此时i并没有再次被复值。默认为0,然而我的button事件让他加一。所以他总显示1。如果没有被再次编译,这又如何解释呢?(我的变量为什么不是在5(第一次点击button)的基础上?)为什么不一次次的+1呢?我把这个变量环城是一个cs重定义的对象。其结果一样。。帮我下,谢谢。。
在做的时候我用的是cs定义的对象。

//------------------------cs类文件
public class temp_i
{
private int a;
public temp_i()
{
valuea=0;
}
public temp_i(int tempa)
{
valuea=tempa;
}
public int valuea
{
get{return a;}
set{a=value;}
}
}

//------------------于aspx关联的cs文件
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!Page.IsPostBack)
{
a=new temp_i(10);
ShowData();

}
}
public void ShowData()
{
temp.Text=a.valuea.ToString();
}

private void begin_Click(object sender, System.EventArgs e)
{
a.valuea++;
ShowData();
}
...全文
127 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
flashmagic 2005-05-12
  • 打赏
  • 举报
回复
嗯,有一个问题也应该引起注意。。

如果变量不是static的。这个程序会出错。“未将对象引用设置到对象的实例。”因为客户端掉用这个程序,他首先会判断if(!Page.IsPostBack)。很好,程序能够正常的运行。然而,当我点击button的时候,就会出现上面这个错误了。因为,程序首先要调用Page_Load函数。这次,他并没有创建对象,是因为if(!Page.IsPostBack),当然了,把这个判断屏蔽掉就是永远为1了。然而我们在a.values++的时候,这个a就是上面错误的源泉。

此时。如果我们在声明的时候把a声明为静态的static protected temp_i a;。(有if(!Page.IsPostBack)判断)上面的问题都没有了。这似乎不是创建对象的问题吧!?
flashmagic 2005-05-12
  • 打赏
  • 举报
回复
真晕,我竟然忘掉了static...谢谢。。问题迎刃而解。不论删掉多少遍对象,又新创建了多少便对象,static变量是共享的。

实际上是被编译一便?然而每次运行的时候,所有的属性,都被删掉,从新编译?变量会被从新编译,而方法呢?方法有必要嘛?就好像创建一个对象只为属性分配内存一样。还是!?!?
ruihuahan 2005-05-12
  • 打赏
  • 举报
回复
代码编译是一次。但每次请就此页的时候,都会生成的一的从你codebehind中的类派出来的类的一个实例。
帆张芳显 2005-05-12
  • 打赏
  • 举报
回复
对头
wlzbaby 2005-05-12
  • 打赏
  • 举报
回复
现在的情况是什么?

temp.Text 永远为一 ?
仓木泽 2005-05-12
  • 打赏
  • 举报
回复
用static解决这个问题
yilan505 2005-05-12
  • 打赏
  • 举报
回复
被编译两次.
webfactory 2005-05-12
  • 打赏
  • 举报
回复
是这样的,你每提交一次后,实际旧页面的对象已取消,新页面是新建了一个对象,所以你的变量实际上又重新生成了一次
1. C#语言方面... 4 1.1 垃圾回收... 4 1.1.1 避免不必要的对象创建... 4 1.1.2 不要使用空析构函数 ★... 4 1.1.3 实现 IDisposable 接口... 4 1.2 String 操作... 5 1.2.1 使用 StringBuilder 做字符串连接... 5 1.2.2 避免不必要的调用 ToUpper 或 ToLower 方法... 5 1.2.3 最快的空串比较方法... 6 1.3 多线程... 6 1.3.1 线程同步... 6 1.3.2 使用 ThreadStatic 替代 NameDataSlot ★... 7 1.3.3 多线程编程技巧... 7 1.4 类型系统... 8 1.4.1 避免无意义的变量初始化动作... 8 1.4.2 ValueType 和 ReferenceType. 8 1.4.3 尽可能使用最合适的类型... 9 1.5 异常处理... 10 1.5.1 不要吃掉异常★... 10 1.5.2 不要吃掉异常信息★... 10 1.5.3 避免不必要的抛出异常... 10 1.5.4 避免不必要的重新抛出异常... 10 1.5.5 捕获指定的异常,不要使用通用的System.Exception. 10 1.5.6 要在finally里释放占用的资源... 11 1.6 反射... 11 1.6.1 反射分类... 12 1.6.2 动态创建对象... 12 1.6.3 动态方法调用... 12 1.6.4 推荐的使用原则... 12 1.7 基本代码技巧... 13 1.7.1 循环写法... 13 1.7.2 拼装字符串... 13 1.7.3 避免两次检索集合元素... 13 1.7.4 避免两次类型转换... 14 1.7.5为字符串容器声明常量,不要直接把字符封装在双引号" "里面。... 14 1.7.6 用StringBuilder代替使用字符串连接符 “+”. 14 1.7.7 避免在循环体里声明变量,... 15 1.8 Hashtable. 15 1.8.1 Hashtable机理... 15 1.8.2 使用HashTale代替其他字典集合类型的情形:... 16 1.9 避免使用ArrayList。... 16 1.10从XML对象读取数据... 17 1.11 避免使用递归调用和嵌套循环,... 17 1.12 使用适当的Caching策略来提高性能... 17 2. Ado.Net 17 2.1 应用Ado.net的一些思考原则... 18 2.2 Connection. 18 2.2.1 在方法中打开和关闭连接... 18 2.2.2 显式关闭连接... 18 2.2.3 确保连接池启用... 19 2.2.4 不要缓存连接... 19 2.3 Command. 19 2.3.1 使用ExecuteScalar和ExecuteNonQuery. 19 2.3.2 使用Prepare. 19 2.3.3 使用绑定变量 ★... 19 2.4 DataReader 20 2.4.1 显式关闭DataReader 20 2.4.2 用索引号访问代替名称索引号访问属性... 20 2.4.3 使用类型化方法访问属性... 20 2.4.4 使用多数据集... 20 2.5 DataSet 21 2.5.1 利用索引加快查找行的效率... 21 2. 使用DataView.. 21 3.ASP.NET. 21 3.1 减少往返行程(Reduce Round Trips)... 21 3.2 避免阻塞和长时间的作业... 22 3.3 使用缓存... 22 3.4 多线程... 22 3.5 系统资源... 23 3.6 页面处理... 23 3.7 ViewState. 23 4.JScript 24 4.1 JScript性能优化的基本原则... 24 4.2 JScript语言本身的优化... 24 4.3 DOM相关... 27 4.4 其他... 28

62,253

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧