首页 新闻 会员 周边

我的理解对吗?如果错了请指正。

0
悬赏园豆:5 [已解决问题] 解决于 2012-07-03 14:56
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
                  int i=1;
                  string str = "";
                  void print()
                  {
                      i = 3;
                     str = "我爱提问";
                      label1.Text = Convert.ToString(i)+str;
                  }
        private void Form1_Load(object sender, EventArgs e)
        {                            
              
                        print();
               label2 .Text = Convert .ToString (i)+str;
        }
    }
}

 

运行结果label1=3我爱提问:label2=3我爱提问;
是不是窗体一加载,在栈中给i分配空间 i=1,调用方法print(),用栈中的i的同一块内存,数据i=3,方法结束后,栈中i存的是3

窗体一加载,在堆中给str分配空间 str="我",返回引用给str,调用方法print(),在堆中另分配一块空间str="我爱提问",把引用返回给str,方法结束后str的引用指向str="我爱提问"。

易顺金的主页 易顺金 | 初学一级 | 园豆:2
提问于:2012-07-03 14:21
< >
分享
最佳答案
0

你说的没错。

LCM | 大侠五级 |园豆:6876 | 2012-07-03 14:41
其他回答(2)
2

很奇怪,你为什么对堆栈之类的这么感兴趣?我已经推荐你去阅读《CLR VIA C#》了,你却在这里问这个问题。

 

堆、栈技术是很底层的,一般的程序员是很少有机会去接触这些东西,除非你研究的就是系统级的东东。

 

至于你的这个问题,在.NET中,当构建一个类的时候:

1、会把类成员分配好空间(定义好成员变量)

2、如果类成员变量在定义的时候有赋值,则执行赋值操作

3、调用相应的构造函数

 

所有的这些行为都是先基类后派生类的。

 

至于你的这个问题,那是窗体加载相关的,当一个窗体加载后,会有一系列的事务处理(具体有哪些,那就老多了,我也一知半解),其中一个就是触发窗机加载事件(Load),假如你绑定了Load事件,则会执行,从你的代码看是绑定了,所以会执行方法Form_Load,而方法里。。。你自己要去分析咯。

 

窗体的最终显示是一定要等到Load事件执行完成以后的。

收获园豆:5
无之无 | 园豆:5095 (大侠五级) | 2012-07-03 14:43

好笼统啊。

支持(0) 反对(0) 易顺金 | 园豆:2 (初学一级) | 2012-07-03 14:54

@易顺金: 不笼统。你理解透了就不笼统了。

其实,你对OOP思想,C#基础编程都还没正式入门,却来研究什么堆啊栈啊,那是没意义的。

 

如果你一定要研究堆栈,就不要拿这些东西来说事,应该去讨论专门的OS原理、计算机原理之类的。

支持(0) 反对(0) 无之无 | 园豆:5095 (大侠五级) | 2012-07-03 14:58
0

错,都在堆上的.

56180825 | 园豆:1756 (小虾三级) | 2012-07-03 14:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册