c# - Reason for Using IDisposable Interface -



c# - Reason for Using IDisposable Interface -

we know idisposable interface using disposing unmanaged resources. have class contains next code. here have implemented dispose method idisposable interface.

class classa:idisposable { public classa() { console.writeline("classbeingtested: constructor"); } private bool disposed = false; image img = null; public image image { { homecoming img; } } ~classa() { console.writeline("classbeingtested: destructor"); // phone call dispose false. since we're in // destructor call, managed resources // disposed of anyways. dispose(false); } public void dispose() { console.writeline("classbeingtested: dispose"); // dispose of managed , unmanaged resources dispose(true); // tell gc finalize process no longer needs // run object. gc.suppressfinalize(this); } protected virtual void dispose(bool disposemanagedresources) { // process if mananged , unmanaged resources have // not been disposed of. if (!this.disposed) { console.writeline("classbeingtested: resources not disposed"); if (disposemanagedresources) { console.writeline("classbeingtested: disposing managed resources"); // dispose managed resources if (img != null) { img.dispose(); img = null; } } // dispose unmanaged resources console.writeline("classbeingtested: disposing unmanaged resouces"); disposed = true; } else { console.writeline("classbeingtested: resources disposed"); } } // loading image public void loadimage(string file) { console.writeline("classbeingtested: loadimage"); img = image.fromfile(file); } }

what uncertainty why need implement dispose method idisposable interface?. instead of can create own dispose method in class without inheriting idisposable interface have given below.

for class below haven't inherited class idisposable interface. instead of created own dispose method. works fine.

class classa { public classa() { console.writeline("classbeingtested: constructor"); } private bool disposed = false; image img = null; public image image { { homecoming img; } } ~classa() { console.writeline("classbeingtested: destructor"); // phone call dispose false. since we're in // destructor call, managed resources // disposed of anyways. dispose(false); } public void dispose() { console.writeline("classbeingtested: dispose"); // dispose of managed , unmanaged resources dispose(true); // tell gc finalize process no longer needs // run object. gc.suppressfinalize(this); } protected virtual void dispose(bool disposemanagedresources) { // process if mananged , unmanaged resources have // not been disposed of. if (!this.disposed) { console.writeline("classbeingtested: resources not disposed"); if (disposemanagedresources) { console.writeline("classbeingtested: disposing managed resources"); // dispose managed resources if (img != null) { img.dispose(); img = null; } } // dispose unmanaged resources console.writeline("classbeingtested: disposing unmanaged resouces"); disposed = true; } else { console.writeline("classbeingtested: resources disposed"); } } // loading image public void loadimage(string file) { console.writeline("classbeingtested: loadimage"); img = image.fromfile(file); } }

so can 1 tel me tat reason behind of implementing dispose method idisposable interface.

when implement idisposable, can utilize using exception-safe disposing.

c#

Comments

Popular posts from this blog

iphone - Dismissing a UIAlertView -

intellij idea - Update external libraries with intelij and java -

javascript - send data from a new window to previous window in php -