Istnieje wiele informacji wokół o „standardowej pełnej” IDisposable wdrożenia do usuwania niezarządzalny zasobów - ale w rzeczywistości ta sprawa jest (bardzo) rzadkie (większość zasoby są już owinięty przez zarządzanych klas). Pytanie to koncentruje się na mimimalnej implementacji IDisposed dla znacznie bardziej powszechnego przypadku "tylko zarządzanych zasobów".Minimal IDispose implimenation zarządzanych zasobów tylko
1: Czy mimimal wdrożenie IDisposable w kodzie poniżej poprawny, czy są jakieś problemy?
2: Czy istnieje jakikolwiek powód, aby dodać pełną standardową implualizację IDisposible (Dispose(), Dispose (bool), Finalizer itp.) W stosunku do przedstawionej minimalnej implementacji?
3: Czy to jest OK/mądry w tym minimalnym przypadku uczynienia utylizować wirtualny (ponieważ nie zapewniając Dispose (bool))?
4: Jeśli ta minimalna realizacja jest zastąpić pełnej standardowej implementacji, który zawiera (bezużyteczne, w tym przypadku) finalizatora - Czy ta zmiana jak GC obsługuje obiekt? Czy jest jakiś minus?
5: Przykład zawiera programatory czasowe i zdarzenia, ponieważ te przypadki są szczególnie ważne, aby ich nie pominąć, ponieważ nieudane ich usunięcie utrzyma obiekty przy życiu i kopie ("to" w przypadku Timera, źródła zdarzeń w przypadku obsługi zdarzeń) dopóki GC nie zostanie ukarany, aby pozbyć się ich w swoim czasie. Czy są jakieś inne podobne przykłady?
class A : IDisposable {
private Timer timer;
pubic A(MyEventSource eventSource) {
eventSource += Handler
}
private void Handler(object source, EventArgs args) { ... }
public virtual void Dispose() {
timer.Dispose();
if (eventSource != null)
eventSource -= Handler;
}
}
class B : A, IDisposable {
private TcpClient tpcClient;
public override void Dispose() {
(tcpClient as IDispose).Dispose();
base.Dispose();
}
}
bibl:
MSDN
SO: When do I need to manage managed resources
SO: How to dispose managed resource in Dispose() method in C#
SO: Dispose() for cleaning up managed resources
To jest 1) i 1). Wygląda na to, że już to wiesz. –
@HansPassant Przeformułowałem pytanie. Twój wkład byłby doceniony. – Ricibob