Tag: finalizer

使用Object Initializer的复活差异

我有这个代码: 本质上我正在尝试演示使用c#终结器并制作一个不能死的对象,我称之为Zombie。 现在,通常这个演示工作得很好,但今天我尝试使用与对象初始化程序相同的代码,而不是仅仅分配给属性(在本例中为Name)。 我注意到有区别。 即使终结器永远不会被调用,即使我正在尽最大努力使垃圾收集器完成它的工作。 有人可以解释这个区别,还是我在C#编译器中发现了一个错误? (我在Win7x64的VS2010 SP1中使用C#4) 谢谢。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace Zombie { class Program { static void Main(string[] args) { Console.WriteLine(“Main thread: ” + Thread.CurrentThread.ManagedThreadId); // case 1: this is where the problem is located. Zombie z = new Zombie { Name = “Guy” }; […]

终结者和IDisposable

根据文档(MSDN: 链接 ),很明显在实现终结器时应该使用IDisposable模式。 但是,如果实现IDisposable(以便提供处理对象的确定性方法),您是否需要实现终结器?并且您没有任何非托管资源来清理? 在我看来,如果类只有托管资源,如果你不调用Dispose,那么托管资源将自动被GC清理,因此不需要实现终结器。 我错了吗? 另外,如果我使用我的Dispose方法清理事件处理程序,该怎么办? 由于Dispose不会自动被GC调用,我应该实现Finalizer,以确保事件处理程序无线连接吗?