http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 4661|回复: 7

[其他] 初学C#, 不明白为什么可以重复实例同一个对象。

[复制链接]
发表于 2014-4-25 13:56:31 | 显示全部楼层 |阅读模式
[C#] 纯文本查看 复制代码
            for (int i = 0; i < 10; i++)
            {
                Person p1 = new Person();
                p1.Name = "桂洪";
                Console.WriteLine(p1.Name);


              
            }
            Console.ReadKey();

我声明一个类,在For循环里重复实例十个对象,而且对象名都是一样。
为什么不会报错哦,明胆十个对象名都一样的。



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2014-4-25 14:37:25 | 显示全部楼层
对象是有作用域的,到你下一次再进来时上一次的对象就不存在了。对象在进入作用域时产生,在超出做用域后会回收掉
所以不会重复
发表于 2014-4-25 14:38:02 | 显示全部楼层
[C#] 纯文本查看 复制代码
Person p1 = new Person();
for (int i = 0; i < 10; i++)
{

    p1.Name = "桂洪";
    Console.WriteLine(p1.Name);
}
Console.ReadKey();



这样写的效果是一样的
发表于 2014-4-25 19:23:14 | 显示全部楼层
和楼主一样,我也有同样的疑问,按理说,只有在跳出创建该对象的作用域的时候,对象才会被回收,但不知道是我对C#缺乏认知还是事实如此,循环过程中,作用域都没有被更改,如果没有更改,那对象就不存在被回收的可能,从而得出,该段代码存在重复创建对象的问题
发表于 2014-4-26 08:39:21 | 显示全部楼层
IceMan 发表于 2014-4-25 19:23
和楼主一样,我也有同样的疑问,按理说,只有在跳出创建该对象的作用域的时候,对象才会被回收,但不知道是 ...

在循环里第一个循环就是一个新的作用域,上一个就会被覆盖掉,里面的对象也就自然不存在了,你可以直白点想,如果对象会覆盖那么循环也会覆盖,所以就不会冲突了。
发表于 2014-4-26 11:13:33 | 显示全部楼层
Person p1 = new Person();
Person p2 = new Person();
Person p3 = new Person();
这样是不是也不行,能分别操作三个对象吗?
发表于 2017-3-26 21:38:23 | 显示全部楼层
本帖最后由 小哲 于 2017-3-26 22:02 编辑

[C#] 纯文本查看 复制代码
Person p1 = new Person();
---------------------------------------------------------
创建对象放外边,然后把↓下面代码放在线程里,在线程里访问对象,怎么不行呢?苏飞大大
for (int i = 0; i < 10; i++)
{
 
    p1.Name = "桂洪";
    Console.WriteLine(p1.Name);
}
Console.ReadKey();





发表于 2017-3-27 08:27:50 | 显示全部楼层
怎么不行?提示什么,代码怎么写的
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-3-29 15:32

© 2014-2021

快速回复 返回顶部 返回列表