C# 2.0 对象是否也有像局部变量所具有的方法那样的作用域?

C# 2.0 对象是否也有像局部变量所具有的方法那样的作用域?,c#-2.0,C# 2.0,我不明白gabage收集器是如何决定一个对象不再使用的,这个对象是否有一些作用域 就像我有密码一样 class A { in x; m1(){}} class B {A a=new a(); a.x=10; } 所以我想知道,当对象变得不可用时 我的意思是,在上面的代码中,如果类be到达结束行,那么当它退出该类时,do对象可以进行垃圾收集,之后,类varibale将自动保持默认值10,将永久值10,只有声明(类型、成员、本地)具有作用域。只有声明(类型、成员、本地)具有作用域。没有其他内容。对

我不明白gabage收集器是如何决定一个对象不再使用的,这个对象是否有一些作用域

就像我有密码一样

class A { in x; m1(){}}
class B {A a=new a(); a.x=10; }
所以我想知道,当对象变得不可用时


我的意思是,在上面的代码中,如果类be到达结束行,那么当它退出该类时,do对象可以进行垃圾收集,之后,类varibale将自动保持默认值10,将永久值10,只有声明(类型、成员、本地)具有作用域。只有声明(类型、成员、本地)具有作用域。没有其他内容。

对象的作用域与任何其他变量一样,由语言规则定义

当没有其他对象引用某个对象时,该对象将被垃圾收集

GC有其或多或少复杂的算法来确定这一点。其中之一是引用计数

当一个本地变量超出范围时,它会失去一个引用,如果referenece coutn为0,则会被垃圾收集

垃圾收集不是确定性的,也就是说,您无法决定何时对其进行垃圾收集


将变量设置为null基本上会使变量成为可垃圾回收的。

对象的作用域与任何其他变量一样,并且由语言规则定义

当没有其他对象引用某个对象时,该对象将被垃圾收集

GC有其或多或少复杂的算法来确定这一点。其中之一是引用计数

当一个本地变量超出范围时,它会失去一个引用,如果referenece coutn为0,则会被垃圾收集

垃圾收集不是确定性的,也就是说,您无法决定何时对其进行垃圾收集


将变量设置为null基本上会使变量成为垃圾收集器。

垃圾收集器的工作方式是查找并标记从已知起点可以访问的所有对象(例如,每个线程的堆栈、所有静态变量等),然后清除未标记的对象。完整的解释通常要复杂得多,但这是它的本质。

垃圾收集器通过查找和标记所有从已知起点可以访问的对象(例如,每个线程的堆栈、所有静态变量等),然后清除没有标记的对象来工作。完整的解释通常要复杂得多,但这是它的本质。

因此,我们永远无法预测对象何时会使用较少,并再次保留其默认值values@NoviceToDotNet:这是GC的工作。因此,我们永远无法预测对象何时会使用较少,并再次保持其默认值values@NoviceToDotNet:这是GC的工作。但如何确定对象不是mre引用或使用后的每个对象我都应该显式使用obj=null。或者它是自动发生的,Gc如何决定一个对象不再被引用不,这没关系,Gc在本质上是不确定的,它什么时候会垃圾收集对象,但是我们能知道现在这个对象已经被垃圾收集了吗是的,你能知道在我上面发布的情况下,对象什么时候会被垃圾收集,当它超出范围时,当您显式地将其设置为null时。C#语言的aexact范围规则可以通过谷歌搜索。但在我们的代码中,我们从未显式使用obj=null,那么一个对象如何失去引用并符合GCE的条件,但如何确定该对象未被mre引用或使用后的每个对象我应该显式使用obj=null。或者它是自动发生的,Gc如何决定一个对象不再被引用不,这没关系,Gc在本质上是不确定的,它什么时候会垃圾收集对象,但是我们能知道现在这个对象已经被垃圾收集了吗是的,你能知道在我上面发布的情况下,对象什么时候会被垃圾收集,当它超出范围时,当您显式地将其设置为null时。C#语言的aexact范围规则可以通过谷歌搜索。但在我们的代码中,我们从未明确使用obj=null,那么一个对象如何失去引用并符合GCI的条件如果在类B的某个点上我再次创建像A=new A()这样的对象;那么,这是否意味着内存中有两个对象共享所有方法并拥有实例变量的单独副本。。或者,将创建第二个对象,“a”表示第一个对象将用于gci,如果在类B的某个点上,我再次创建对象,如a=新a();那么,这是否意味着内存中有两个对象共享所有方法并拥有实例变量的单独副本。。或者将创建第二个对象,“a”表示第一个对象将用于GC