Im Buch Framework Design Guidelines bin ich auf einen interessanten Aspekt gestoßen, der bei der Implementierung von Kon- und Destruktoren beachtet werden muss. Man stelle sich folgende Szenario vor: In einem Konstruktor wird durch einen falschen oder fehlerhaften Parameter ein Zustand erreicht, der es erfordert, eine Exception zu werfen. Dies wird nun getan. Der Aufrufer behandelt nun die Exception. Allerdings ist das Objekt zu diesem Zeitpunkt bereits instanziiert, wenn auch nicht zwangsläufig vollständig initialisiert. Der Initialisierungszustand hängt hier von der Stelle im Konstruktor ab, in dem die Exception geworfen wurde.
Interessant an diesem Szenario ist nun, dass das instanziierte Objekt ja auch durch den Garbage Collector freigegeben wird. Es wird also die Finalize-Methode und die Dispose-Methode mit false aufgerufen. Bei der Implementierung dieser Zweige sollte man daher im Hinterkopf haben, dass sich unter Umständen das freizugebende Objekt in einem undefinierten Zustand befindet.
Eigentlich ist dies ein Sachverhalt, der bei genauer Betrachtung vollkommen logisch ist. Allerdings muss man sich dessen erst einmal bewusst sein.
Remember Me
a@href@title, strike
Theme based on MadsSimple dasBlog theme by Mads Kristensennewtelligence dasBlog 2.3.9074.18820
Disclaimer The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.