0

我开始阅读 C# 5.0 in a Nutshell,现在我在 Stack and Heap 一章有一个 GC 如何处理堆对象的示例:

StringBuilder ref1 = new StringBuilder ("object1");
Console.WriteLine (ref1);
// The StringBuilder referenced by ref1 is now eligible for GC.

所以作者说 ref1 对象在 Console.WriteLine 之后已经准备好进行 GC,但是如果我想稍后在我的程序中使用 ref1 对象怎么办?

4

2 回答 2

4

只要您使用对对象的引用,它就没有资格被收集。该示例的重点是表明,由于ref1代码不再访问该对象,因此可以在此之后的任何时候收集该对象。

于 2013-01-30T03:06:28.927 回答
1

编译器知道没有指向 ref1 的链接,因此将其标记为未使用。如果您对 ref1 有其他用途,编译器就会知道这一点并使其保持活动状态。J. Richter 有一本好书:“.NET CLR via C#”。他确实在书中解释了很多

于 2013-01-30T03:05:03.310 回答