首页 新闻 会员 周边

小弟想问问一个理解的问题。对象超出作用域到底是个什么概念呢?

0
悬赏园豆:200 [已解决问题] 解决于 2014-08-25 21:42

小弟最近在学.net的垃圾回收机制 其中讲了 对象在超出了作用域后 自动回收对象

哪么小弟就不解了 对象在超出了作用域是个什么概念 该怎么去理解呢?

还有什么是可达对象和不可达对象呢? 有知道的大神 希望给小弟指点下江山 谢谢

狂扁小朋友的主页 狂扁小朋友 | 初学一级 | 园豆:10
提问于:2014-08-25 20:27
< >
分享
最佳答案
0

超出作用域就是超出可起作用的范围的意思。

比如,在一个函数里定义的局部变量,超出函数结束后就失效了;比如,在if语句块、循环语句块、using语句块里定义的循环变量、语句块内变量,甚至认为用花括号限定范围内定义的变量,在超出花括号或语句块后都叫超出作用范围。

 

dotnet的回收机制是在超出作用域后就存在可能,但不一定立即执行,因为回收垃圾是一个比较消耗资源的行为,只有在消耗系统太多的资源(内存)或系统资源严重不足或垃圾资源占用时间太长的时候才会回收。

收获园豆:100
519740105 | 大侠五级 |园豆:5810 | 2014-08-25 21:26

貌似明白了 跟我猜想差不多 先谢谢大神了 请问怎么给分呢? 才进论坛没几天

狂扁小朋友 | 园豆:10 (初学一级) | 2014-08-25 21:29
其他回答(3)
0

面向对象语言,万物皆对象!

你要多看看面向对象的代码(即:继承,封装,多态,抽象)后就很好理解这个了。

如你声明一个类:

Class Man

{

}

下面就是,创建一个对象(下滑线为创建一个对象!,oneman是存放在栈上指向对象的一个引用,说白了就是这个对象的代言人)

Man onemen=new Man;


下面就是回收对象:

创建一个新类

Class People

{

Man onemen=new Man;

}

CLR(.net回收垃圾的机制,公共语言运行时),在最后一个“}”结束后就会回收这个对象“oneman”

你说的对象超出了作用域就是去找创建这个对象的函数体(就是"{}")之间都会有效,超出则不可访问。

最后一个问题你说的可达对象和不可达对象,我理解是可以访问(调用)或不可以,还是和这个作用域相关。

还有什么不理解再问吧

收获园豆:100
CTRA王大大 | 园豆:30 (初学一级) | 2014-08-25 20:56

 大神 是不是Man onemen=new Man 创建对象完毕了 这个对象就超出了对象作用域了呢?

支持(0) 反对(0) 狂扁小朋友 | 园豆:10 (初学一级) | 2014-08-25 21:04

@狂扁小朋友: 

首先这段代码Man onemen=new Man,可能出现在一个类中,也可能出现在一个函数(方法)中。他们的特点都有作用域"{}"

一个类:Class A {

Man onemen=new Man

}

一个方法:void print(){

Man onemen=new Man

}

如果

Class A {

  void print(){

    Man onemen=new Man

  }

  void getObj{

    oneman.一个属性=“aa”;//---------------这里去访问 oneman就是超出了作用域的范围!!

  }

}

能明白了吗?不懂再问吧

支持(1) 反对(0) CTRA王大大 | 园豆:30 (初学一级) | 2014-08-25 21:09

@凡图: 大神 我大概明白了 如果在 A类里定义 如果A的对象超出作用域 那么 onemen也会跟着失去作用域 如果在A类的一个方法里定义 方法运行结束了 那么 onemen就超出了作用域了 是这样的吗?

支持(0) 反对(0) 狂扁小朋友 | 园豆:10 (初学一级) | 2014-08-25 21:37

@狂扁小朋友: 

YES!完全正确。建议你先看"C#面向对象基础",你直接百度啊什么的这么搜。然后高级点6大设计原则,最后看看 工厂设计模式,然后你就茅塞顿开了。

支持(0) 反对(0) CTRA王大大 | 园豆:30 (初学一级) | 2014-08-25 21:44
0

哇。200分啊。我觉得楼主先去理解下作用域的概念,然后这个问题就迎刃而解了。

Firen | 园豆:5385 (大侠五级) | 2014-08-25 21:01

作用域的概念我懂 简单不科学的说法就是 在一对花括号里这个就是一作用域

我想验证下我理解的是不是对的呢 

 

就是说 一个变量在一个作用域里 比如在一个方法里 这个函数执行完以后 这个变量就超出了作用域了 是这样的吗

支持(0) 反对(0) 狂扁小朋友 | 园豆:10 (初学一级) | 2014-08-25 21:05
0

概念好懂,想解释清楚还真不容易...

幻天芒 | 园豆:37175 (高人七级) | 2014-08-25 21:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册