c# реализация IDisposable утилизировать правильно - PullRequest
0 голосов
/ 29 апреля 2020

Я следовал примеру публикации, где у меня есть сервис, такой как MyService, и он был заключен в ключевое слово using, например,

(using MyService = new MyService())
{

}

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

public class MyService : IDisposable
{
  void IDisposable.Dispose()
  {

  }
}

Компилятор не жаловался, и реализация 'using', кажется, работает, но мне сказали, что это неправильная реализация. Я получил IDisposable.Dispose () из одного из постов здесь. Теперь в большинстве сообщений есть реализация add publi c void Dispose (утилизация).

Я ищу более простой способ утилизации, чем несколько методов в нескольких сервисах. Есть ли более простой способ?

Спасибо

Ответы [ 2 ]

2 голосов
/ 29 апреля 2020

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

public sealed class MyService : IDisposable
{
    public void Dispose()
    {

    }
}

Если вы хотите, чтобы этот класс был унаследован, вы должны предоставить метод public virtual void Dispose(), чтобы унаследованные классы могли есть метод утилизации. Затем вы должны реализовать шаблон dispose (bool dispose).

0 голосов
/ 29 апреля 2020

Если вы реализуете интерфейс IDisposable в своем классе, вам действительно нужно понять его назначение. Я считаю, что в настоящее время вам не хватает этих знаний. Я рекомендую просмотреть эту ссылку и внимательно прочитать ее.

Основное использование этого интерфейса - освобождение неуправляемых ресурсов. Сборщик мусора автоматически освобождает память, выделенную для управляемого объекта, когда этот объект больше не используется. Однако невозможно предсказать, когда произойдет сборка мусора. Кроме того, сборщик мусора не знает о неуправляемых ресурсах, таких как дескрипторы окон или открытые файлы и потоки.

Используйте метод Dispose этого интерфейса, чтобы явно освобождать неуправляемые ресурсы вместе с сборщиком мусора. Потребитель объекта может вызвать этот метод, когда объект больше не нужен.

IDisposable Interface

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...