Что здесь делает символ тильды (~) [дубликат]

StackOverflow https://stackoverflow.com/questions/1331683

  •  19-09-2019
  •  | 
  •  

Вопрос

Возможный дубликат:
Что означает тильда (~) в C#?

class ResourceWrapper
{
    int handle = 0;
    public ResourceWrapper()
    {
        handle = GetWindowsResource();
    }
    ~ResourceWrapper()                     //this line here
    {
        FreeWindowsResource(handle);
        handle = 0;
    }
    [DllImport("dll.dll")]
    static extern int GetWindowsResource();
    [DllImport("dll.dll")]
    static extern void FreeWindowsResource(int handle);
}

Что делает тильда в указанной строке.

Я думал, что это побитовый оператор НЕ, на самом деле я не совсем понимаю весь этот блок (закомментированная строка и круглые скобки после него), это не метод, не параметр или что-то в этом роде, что это такое а почему перед ним тильда?

Это было полезно?

Решение

То есть деструктор.Он заботится о том, чтобы все ресурсы были освобождены при сборке мусора.

Другие советы

Это реализует финализатор (метод Finalize) класса.Обычно вам не следует реализовывать финализатор.

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

Как и в С++, ~ClassName это метод деструктора.Он вызывается в C#, когда рассматриваемый объект очищается сборщиком мусора.В отличие от C++, где существуют детерминированные моменты времени вызова деструктора, в C# невозможно предсказать, когда он будет вызван (или даже будет ли он вызван).

То, что вы, вероятно, ищете, это IDisposable шаблон, который обеспечивает гораздо лучший подход к этому.

Это Деструктор.Это дает вам неявный контроль над освобождением ресурсов.То есть его называют Уборщик мусора.Если вам нужен явный контроль над высвобождением ресурсов, вы можете реализовать IDодноразовый Проверить Реализация Finalize и Dispose для очистки неуправляемых ресурсовРекомендации по проектированию каркаса также есть дополнительная информация.

Ах, я только что нашел ответ и не вижу, как удалить свой вопрос.он указывает деструктор класса

я понятия не имею о C#, но судя по тому, что делает код, это похоже на деконструктор, говорящий

  1. освободить ресурс, на который ссылается handle
  2. набор handle к 0 быть уверенным

тоже как-то созвучно с понятием «нет»…:)

хотя я могу ошибаться...

приветствие

back2dos

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top