Здравствуйте, почему в первом случае не вызывается финализатор?
using System;
using static System.Console;
namespace ConsoleApp4
{
class FinalizableObject
{
~FinalizableObject()
{
WriteLine(nameof(FinalizableObject));
}
}
class Program
{
public static void func() {
WriteLine(nameof(func));
var a = new FinalizableObject() { };
}
static void Main(string[] args)
{
func();
GC.Collect();
GC.WaitForFullGCComplete();
GC.Collect();
GC.WaitForFullGCComplete();
Console.Read();
}
}
}
Но во втором случае, финализатор вызывается ровно 1 раз как и положено.
class FinalizableObject
{
~FinalizableObject()
{
WriteLine(nameof(FinalizableObject));
Program.finalizableObject = this;
}
}
class Program
{
public static FinalizableObject finalizableObject;
public static void func() {
WriteLine(nameof(func));
var a = new FinalizableObject() { };
}
static void Main(string[] args)
{
func();
GC.Collect();
GC.WaitForFullGCComplete();
GC.Collect();
GC.WaitForFullGCComplete();
Console.Read();
}