У меня есть код, который вызовет предупреждение анализа кода 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, описанных в этом правиле.