mam jakiś kod, który wyzwoli CA1063 Code Analysis Ostrzeżenie:Analiza Kod CA1063 pożary, gdy wynikające z IDisposable i zapewniające realizację w klasie bazowej
CA1063: Microsoft.Design: IDisposable Usuń z listy interfejsów realizowanych przez "Funkcjonalność" i nadpisanie klasy bazowej Zamiast tego należy użyć implementacji.
Jednak nie jestem pewien, co muszę zrobić, aby naprawić to ostrzeżenie.
Krótko, mam interfejs IFunctionality
, który pochodzi od IDisposable
. Klasa Functionality
implementuje IFunctionality
, ale wywodzi się z klasy Reusable
, aby móc ponownie użyć som-kodu. Klasa Reusable
również pochodzi z 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
}
mogę pozbyć się ostrzeżenia nadrzędnymi Dispose
na Functionality
i wywołanie klasy podstawowej Dispose
choć robi to nie powinno zmienić semantykę kodu.
Więc czy jest coś o IDisposable
w tym kontekście przeoczyłem, czy jest to po prostu CA1063, który wypala dla tego konkretnego konstruktu?
Wiem, że mogę stłumić CA1063, ale zasada jest dość szeroka i nie chcę przegapić żadnych innych problemów związanych z wdrażaniem IDisposable
zgłoszonych przez tę regułę.
Stare pytanie, ale problemy z CA1063 są wielokrotnie pokonania przez znakowanie klasy jako 'sealed'. Jeśli klasa nie jest "zapieczętowana", myślę, że klasa musi "virual" lub/i że metoda 'Dispose()' musi być 'chroniona' – mortb