Friday, 15 March 2013

c# - How can I implement Dispose for IDisposable without the code being recursive? -



c# - How can I implement Dispose for IDisposable without the code being recursive? -

i'm refactoring code, unleashing resharper on it, , came across this:

public virtual void dispose() { this.dispose(); }

...which r# flags potentially problematic "function recursive on paths"

which makes sense; however, "official" (straight horse's mouth) code similar (dispose calls dispose):

public void dispose() { dispose(true); // object cleaned dispose method. // therefore, should phone call gc.supressfinalize // take object off finalization queue // , prevent finalization code object // executing sec time. gc.suppressfinalize(this); }

...that code wont' compile, though; get, "no overload method 'dispose' takes '1' arguments"

so how can both implement dispose() , not create recursive?

update

if seek (from here):

try { dispose(true); //true: safe free managed resources } { base.dispose(); }

...i get, "'object' not contain definition 'dispose'" , "no overload method 'dispose' takes '1' arguments"

looks need implement dispose pattern correctly:

public class mythingwithresources : idisposable { ~mythingwithresources() { // finalizer , optional part. // finalizers not required, , // intended clearing unmanaged resources // class might hold // finalizers called garbage collector // can never sure when going // called. this.dispose(false); } public void dispose() { this.dispose(true); gc.suppressfinalize(this); } protected virtual void dispose(bool disposing) { if (disposing) { // if disposing true, method // beingness called part of managed disposal // means should safe dispose of managed // resources (.net classes such system.io.stream ) } // if disposing false, dispose method called // finaliser, you're in lastly chance saloon // far tidying stuff concerned. // unmanaged resources (and objects wrap them) // should tidied in scenario } }

c# garbage-collection resharper dispose idisposable

No comments:

Post a Comment