действительно имеет значение, но только в режиме выпуска. Это связано с тем, что в режиме отладки локальные переменные не собираются, пока они находятся в области видимости. Хотя это на самом деле не отвечает на вопрос.

аюсь узнать, как финализация и деструктор работает в 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?

Ответы на вопрос(2)

Ваш ответ на вопрос