profile
Размещено 4 года назад по предмету Информатика от vvoprosovichh94

Пожалуйста объясните нижеприведенный код C#

Using System;

namespace ConsoleApp17
{
public class A:IDisposable
{
private bool disposed = false;
public void Dispose()
{
GC.SuppressFinalize(this);
f(true);
Console.WriteLine(" Call dispose ");
}
private void f(bool dd)
{
if (!this.disposed)
{
if (dd)
Console.WriteLine("Dispose managed resourse. GC.collect()");
Console.WriteLine("Clean up unmanaged resources");
}
disposed = true;
}
~A()
{
f(false);
Console.WriteLine("Call destruktor");
}
}
class Program
{
static void Main(string[] args)
{
A ob = new A();
ob.Dispose();
}
}
}

  1. Ответ на вопрос
    Ответ на вопрос дан alexprogrammer

    Объяснение:

    Начну с того, что в программах на языке C# используются управляемые и неуправляемые объекты. Управляемые объекты без проблем удаляются сборщиком мусора. В то время, как неуправляемые объекты необходимо освобождать вручную.

    В C# есть два способа освобождения ресурсов: через деструктор или через метод Dispose, который определен в интерфейсе IDisposable.

    Деструктор вызывается автоматически во время удаления объекта сборщиком мусора, но момент его вызова определить невозможно, так как сборщик мусора запускается только при недостатке памяти. Таким образом, объекты могут находиться в памяти вплоть до завершения программы.

    Метод Dispose вызывается программистом (использующим этот класс), когда объект больше не нужен. При этом подходе происходит немедленное освобождение ресурсов. Минус подхода - программист может попросту забыть вызвать метод Dispose.

    В вашем коде приведен беспроигрышный вариант: в методе f происходит освобождение управляемых и неуправляемых ресурсов.

    Код прокомментировал ниже. Параметр dd необходим, чтобы не освобождать управляемые ресурсы при вызове деструктора, так на момент его вызова мы не можем быть уверенными в их состоянии, что они до сих пор находятся в памяти.

    namespace ConsoleApp17

    {

       public class A : IDisposable // Объявление класса, реализующего интерфейс IDisposable

       {

           private bool disposed = false; // Объект уничтожен?

           public void Dispose()

           {

               GC.SuppressFinalize(this); // Запрещаем сборщику мусора вызывать деструктор при удалении объекта

               f(true); // Вызываем метод освобождения неуправляемых и управляемых ресурсов

               Console.WriteLine(" Call dispose ");

           }

           private void f(bool dd)

           {

               if (!this.disposed) // Если объект не уничтожен, то уничтожаем

               {

                   if (dd) // Если true, то освобождаем также управляемые ресурсы

                       Console.WriteLine("Dispose managed resourse. GC.collect()");

                   // Освобождаем неуправляемые ресурсы

                   Console.WriteLine("Clean up unmanaged resources");

               }

               disposed = true; // Помечаем, что объект уничтожен

           }

           ~A() // Деструктор

           {

               f(false); // Вызываем метод освобождения неуправляемых ресурсов

               Console.WriteLine("Call destruktor");

           }

       }

       class Program

       {

           static void Main(string[] args)

           {

               A ob = new A(); // Создание объекта

               ob.Dispose(); // Уничтожение объекта

           }

       }

    }

Не тот ответ на вопрос, который вам нужен?
Найди верный ответ
Самые новые вопросы
tegysigalpa2012
Русский язык - 5 лет назад

Помогите решить тест по русскому языку тест по русскому языку «местоимение. разряды местоимений» для 6 класса 1. укажите личное местоимение: 1) некто 2) вас 3) ни с кем 4) собой 2. укажите относительное местоимение: 1) кто-либо 2) некоторый 3) кто 4) нам 3. укажите вопросительное местоимение: 1) кем-нибудь 2) кем 3) себе 4) никакой 4. укажите определительное местоимение: 1) наш 2) который 3) некий 4) каждый 5. укажите возвратное местоимение: 1) свой 2) чей 3) сам 4) себя 6. найдите указательное местоимение: 1) твой 2) какой 3) тот 4) их 7. найдите притяжательное местоимение: 1) самый 2) моего 3) иной 4) ничей 8. укажите неопределённое местоимение: 1) весь 2) какой-нибудь 3) любой 4) этот 9. укажите вопросительное местоимение: 1) сколько 2) кое-что 3) она 4) нами 10. в каком варианте ответа выделенное слово является притяжательным местоимением? 1) увидел их 2) её нет дома 3) её тетрадь 4) их не спросили

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.