On Wed, 2005-05-04 at 09:25 +1000, Michi Henning wrote: > Note that the destructor simply checks whether destroy() was called before the > instance is collected and that this is required only for a debug build. In > order to save the cost of acquiring the lock (and to avoid the cost of > calling the > destructor altogether), the entire destructor is made conditional. >
In general, adding or removing an override is not a breaking change. Finalize works by chaining to the parent using base.Finalize. calling a method on base will always say call <my direct parent>.Method. In the JIT we would in the debug build see: "my direct parent" has the finalize method so call that, but in the non-debug build see "my direct parent" doesn't have a finalizer, so lets try one in the parent of that class. Sadly, due to some limitations in System.Reflection, MCS does not implement this correctly. http://bugzilla.ximian.com/show_bug.cgi?id=26204 As you can tell, thats a pretty old bug ;-( -- Ben _______________________________________________ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list