действительно имеет значение, но только в режиме выпуска. Это связано с тем, что в режиме отладки локальные переменные не собираются, пока они находятся в области видимости. Хотя это на самом деле не отвечает на вопрос.
аюсь узнать, как финализация и деструктор работает в C #, я пытался запустить код вSystem.Object.Finalize
Например (код вставлен, изменения не внесены), но выходные данные не такие, как ожидалось, i, t показывает, что деструктор никогда не вызывается.
Код:
using System;
using System.Diagnostics;
public class ExampleClass
{
Stopwatch sw;
public ExampleClass()
{
sw = Stopwatch.StartNew();
Console.WriteLine("Instantiated object");
}
public void ShowDuration()
{
Console.WriteLine("This instance of {0} has been in existence for {1}",
this, sw.Elapsed);
}
~ExampleClass()
{
Console.WriteLine("Finalizing object");
sw.Stop();
Console.WriteLine("This instance of {0} has been in existence for {1}",
this, sw.Elapsed);
}
}
public class Demo
{
public static void Main()
{
ExampleClass ex = new ExampleClass();
ex.ShowDuration();
}
}
Обновить:
Когда я использую Visual Studio и .net Framework 4.5, код работает должным образом: Вывод такой же, как в примере:
The example displays output like the following: Instantiated object This instance of ExampleClass has been in existence for 00:00:00.0011060 Finalizing object This instance of ExampleClass has been in existence for 00:00:00.0036294
Когда я использую основное приложение dotnet, код не работает: фактический результат:
PS C:\ws\test> dotnet run Instantiated object This instance of ExampleClass has been in existence for 00:00:00.0056874
Так почему же это отличается от .NET Core?