首页 新闻 会员 周边 捐助

实例化对象的疑惑,希望前辈们指点。

0
悬赏园豆:20 [已解决问题] 解决于 2008-10-13 15:45
Code

这段代码中,bank的内存分配是怎么样的?
同时声明两个bank为什么又是错的?

然后,在for语句后,我又怎么样才能区别这5个bank,还是它已经被垃圾回收了?

问题补充: 提高分数,只为更好的了解, 语法规定不能同时申明两个bank变量我肯定知道,我是说怎么用循环就可以申明同名的对象,而直接申明是不行的,它是怎么样处理这个问题的? 然后1楼说可以通过id值来找这个对象,到底是怎么样来找呢?我也不清楚,请指教。比如说,我在for语句后再调用print输出这5个对象可以吗?该怎么做? 还有for循环后,对象的被释放了,那又怎么能找到呢? 我是菜鸟,请老鸟别笑话。
idoku的主页 idoku | 菜鸟二级 | 园豆:267
提问于:2008-10-13 10:51
< >
分享
最佳答案
0

每一次调用new关键字,比如下面的代码
Bank bank = new Bank(2001010, "kulong", "2006.05.1", "43011119870914", 5000);
此时在系统的堆(Heap)上,分配了一段空间,用于存放一个Bank对象的内容
随后在系统的栈(Stack)上,分配了一个指针,指向堆上分配的Bank对象

不能同时声明2个Bank是因为C#的语法不允许在一个域中有同名的变量,因此第2次声明应该去掉类型说明,代码可以如下
Bank bank = new Bank(xxx);
bank = new Bank(xxx); //这里不需要类型说明

在for循环后,所有的Bank都出了作用域,因此无法取值,也就没有区别的概念了

Gray Zhang | 专家六级 |园豆:17610 | 2008-10-13 14:41
其他回答(3)
0

bank的内存分配:会为每个Bank对象分配内存空间

同时声明两个bank,肯定是错了,这个是C#代码规范所不允许的

区别这5个bank:可以在Bank类中加个字段ID,在你new的时候,把当前i的值,给Bank里的ID

就好了,判断时找这个ID是几,这个Bank就是第几个了

程序员老李 | 园豆:790 (小虾三级) | 2008-10-13 11:05
0

for循环结束后,bank就没有了。

yibin | 园豆:17 (初学一级) | 2008-10-13 11:17
0

for (int i = 0; i <= 5; i++)
        {
            Bank bank
= new Bank(2001010, "kulong", "2006.05.1", "43011119870914", 5000);
        }
每循环一次 上一次new的对象就被重新new 一次,而上一次的对象就被gc了

yeyang | 园豆:418 (菜鸟二级) | 2008-10-13 15:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册