У меня есть код, который вызовет предупреждение анализа кода CA1063:
CA1063: Microsoft.Design: Удалите IDisposable из списка интерфейсов, реализованных с помощью функции "Функциональность", и переопределите базовый класс. Вместо этого удалите реализацию.
Однако я не уверен, что мне нужно сделать, чтобы исправить это предупреждение.
Вкратце, у меня есть интерфейс IFunctionality
, который происходит от IDisposable
. Класс Functionality
реализует IFunctionality
, но выводится из класса Reusable
, чтобы иметь возможность повторно использовать код som. Класс Reusable
также имеет значение IDisposable
.
public class Reusable : IDisposable {
~Reusable() {
Dispose(false);
}
public void Dispose() {
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(Boolean disposing) {
// ...
}
public void DoSomething() {
// ...
}
}
public interface IFunctionality : IDisposable {
void DoSomething();
void DoSomethingElse();
}
public class Functionality : Reusable, IFunctionality {
public void DoSomethingElse() {
// ...
}
#if WORK_AROUND_CA1063
// Removes CA1063
protected override void Dispose(Boolean disposing) {
base.Dispose(disposing);
}
#endif
}
Я могу избавиться от предупреждения, переопределив Dispose
на Functionality
и вызывая базовый класс Dispose
, хотя это не должно изменять семантику кода.
Так что-то о IDisposable
в этом контексте я пропустил или это просто CA1063, который пропускает эту конкретную конструкцию?
Я знаю, что могу подавить CA1063, но это правило довольно широкое, и я не хочу пропустить какие-либо другие проблемы при реализации IDisposable
, описанных в этом правиле.