basic dispose pattern
// basic dispose pattern
// only managed resources
basicdispose: idisposable
// user calls
public dispose():
dispose(true)
gc.suppressfinalize()
// needs to be protected virtual
protected virtual dispose(disposing):
if disposing:
// clean managed resources
dispose pattern for finalizable type
Note: there is a performance penalty with finalize types as they go through the finalize and f-reachable queues.
// dispose pattern for finalizable type
// managed and unmanaged resources
// finalizable types are put in finalize and f-reachable queues by gc
finalizable: idisposable
// user calls
public dispose():
dispose(true)
gc.suppressfinalize()
// needs to be protected virtual
protected virtual dispose(disposing):
if disposing:
// clean managed resources
// clean unmanaged resources
// finalize(), gc calls
~finalizable():
dispose(false)
basic dispose pattern with inheritance
With inheritance, call the base class dispose(bool) as well.
basicdispose: idisposable
// ...
basicdisposeChild: basicdispose
// user calls
dispose():
dispose(true)
gc.suppressfinalize()
// needs to be protected virtual
protected virtual dispose(disposing):
if disposing:
// clean managed resources
// clean unmanaged resources
disposed = true
// call base class dispose(bool)
base.dispose(disposing)
With
disposed flag
basicdispose: idisposable
disposed = false
// user calls
public dispose():
dispose(true)
gc.suppressfinalize()
// needs to be protected virtual
protected virtual dispose(disposing):
if disposed:
return
if disposing:
// clean managed resources
disposed = true
No comments:
Post a Comment