using System; public class MyValueReport { int InstanceNumber; public MyValueReport(int InstanceNumber) { this.InstanceNumber = InstanceNumber; Console.WriteLine(InstanceNumber); } } public class MyValue : IDisposable { int n; public MyValue(int n) { this.n = n; MyValueReport MyReport = new MyValueReport(n); } public void Dispose() { MyValueReport MyReport = new MyValueReport(this.n); GC.SuppressFinalize(this); } ~MyValue() { MyValueReport MyReport = new MyValueReport(this.n); } } public class Test { static void Main() { MyValue d1 = new MyValue(1); MyValue d2 = new MyValue(2); MyValue d3 = new MyValue(3); d1 = null; using (d3) { MyValue d4 = new MyValue(4); } d2.Dispose(); } }