Interesting question. Resurrection is explained here:
http://msdn.microsoft.com/en-us/magazine/bb985010.aspx[
^].
The quality of this Microsoft article is just a bit questionable: it refers to the concept of "global object" which does not exist in .NET (so you can consider it just as inaccurate wording), the reachability of the holder of the reference to the dead object is not discussed, and the purpose of resurrection is not clearly outlined.
You can consider this feature of GC architecture (resurrection behavior, as well as
GC.ReRegisterForFinaliz
) as a measure to cover some theoretically possible
pathological cases of user code related to the use of the method
Finalize
, when its code saves the reference to
this
(and not necessarily to some static member as explained in this article; it could be some non-static member of some static object, and so on, anything which itself has a root). In practice, I think such behavior of finalization is best avoided. I would be surprised if someone invents really useful technique based on resurrection behavior. And even of there is some use of it, I would question if it can be considered practical.
See also:
http://blogs.msdn.com/b/abhinaba/archive/2009/04/13/object-resurrection-using-gc-reregisterforfinalize.aspx[
^].
—SA