CA1063 Измените Dispose () так, чтобы он вызывал Dispose (true), затем вызывал GC.SuppressFinalize для текущего экземпляра объекта и затем возвращал - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть этот класс:

public abstract class ImplementsIDisposable : IDisposable
{
    public abstract void Dispose();

    private class InnerClass : ImplementsIDisposable
    {
        private bool disposedValue;

        public override void Dispose()
        {
            if (!disposedValue)
            {
                doSomething();
                disposedValue = true;
            }

            GC.SuppressFinalize(this);
        }
    }
}

И Code Analysis выдает это сообщение:

CA1063 Изменить Dispose () так, чтобы он вызывал Dispose (true), затем вызываетGC.SuppressFinalize для текущего экземпляра объекта и затем возвращает.

И этот:

CA1063 Убедитесь, что Dispose () объявлен как открытый и запечатанный.

Оба в этой строке:

public abstract void Dispose();

Может ли быть так, что он хочет, чтобы Dispose() был реализован в ImplementsIDisposable вместо InnerClass?

1 Ответ

0 голосов
/ 25 сентября 2018

Нет причины, по которой public Dispose() должен быть виртуальным и гораздо менее абстрактным.

Вам необходимо проверить шаблон dispose и правильно его реализовать.Предупреждения намекают на то, как вы должны это сделать, но они могут быть довольно загадочными, если вы не знаете, с чего начинается шаблон.

Вы можете прочитать о Шаблоне утилизации здесь , это довольно просто.

И, конечно, не пропустите этот канонический ТАК ответ по теме.

...