@@ -29,49 +29,54 @@ public abstract class DisposableObject : IDisposable
2929
3030 protected DisposableObject ( ) { }
3131
32- public DisposableObject ( IntPtr handle )
33- {
34- _handle = handle ;
35- }
36-
37- protected virtual void DisposeManagedState ( )
38- {
39- }
40-
41- protected abstract void DisposeUnManagedState ( IntPtr handle ) ;
32+ protected DisposableObject ( IntPtr handle )
33+ => _handle = handle ;
4234
43- protected virtual void Dispose ( bool disposing )
35+ private void internal_dispose ( bool disposing )
4436 {
4537 if ( disposing )
4638 {
39+ // dispose managed state (managed objects).
40+ DisposeManagedResources ( ) ;
41+
4742 // free unmanaged resources (unmanaged objects) and override a finalizer below.
4843 if ( _handle != IntPtr . Zero )
4944 {
50- // dispose managed state (managed objects).
51- DisposeManagedState ( ) ;
52-
5345 // set large fields to null.
54- DisposeUnManagedState ( _handle ) ;
46+ DisposeUnmanagedResources ( _handle ) ;
5547
5648 _handle = IntPtr . Zero ;
5749 }
5850 }
5951 }
6052
53+ /// <summary>
54+ /// Dispose any managed resources.
55+ /// </summary>
56+ /// <remarks>Equivalent to what you would perform inside <see cref="Dispose()"/></remarks>
57+ protected virtual void DisposeManagedResources ( )
58+ {
59+ }
60+
61+ /// <summary>
62+ /// Dispose any unmanaged resources related to given <paramref name="handle"/>.
63+ /// </summary>
64+ protected abstract void DisposeUnmanagedResources ( IntPtr handle ) ;
65+
6166 // override a finalizer only if Dispose(bool disposing) above has code to free unmanaged resources.
6267 ~ DisposableObject ( )
6368 {
6469 // Do not change this code. Put cleanup code in Dispose(bool disposing) above.
65- Dispose ( false ) ;
70+ internal_dispose ( false ) ;
6671 }
6772
6873 // This code added to correctly implement the disposable pattern.
6974 public void Dispose ( )
7075 {
7176 // Do not change this code. Put cleanup code in Dispose(bool disposing) above.
72- Dispose ( true ) ;
77+ internal_dispose ( true ) ;
7378 // uncomment the following line if the finalizer is overridden above.
7479 GC . SuppressFinalize ( this ) ;
7580 }
7681 }
77- }
82+ }
0 commit comments