Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class ClassB
- {
- private ClassA A { get; set; }
- public ClassB()
- {
- this.A = new ClassA();
- this.A.OnProcessed += new ClassA.DelegateProcessed(this.ClassA_Processed);
- }
- public void Process()
- {
- this.A.Process();
- }
- public void ClassA_Processed (ClassA sender, EventArgs e)
- {
- // Do something.
- // Code written by another developer does not free up events before calling Dispose.
- this.A.Dispose();
- this.A = null;
- }
- }
- public class ClassA: IDisposable
- {
- public delegate void DelegateProcessed (A sender, EventArgs e);
- public event DelegateProcessed OnProcessed = null;
- ~ClassA() { this.Dispose(false); }
- public void Dispose ()
- {
- this.Dispose(true);
- System.GC.SuppressFinalize(this);
- }
- private void Dispose (bool disposing)
- {
- if (!this.Disposed)
- {
- if (disposing)
- {
- // Dispose managed resources here.
- // Is it possible / advisable to dispose of delegates / events here?
- // Will this adversely affect the consumer class?
- this.OnProcessed -= new ClassA.DelegateProcessed(this.ClassA_Processed);
- }
- }
- this.Disposed = true;
- }
- public void Process () { this.OnProcessed(this, new EventArgs()); }
- public void ClassA_Processed (ClassA sender, EventArgs e) { }
- }
- private ClassA A { get; set; }
- public ClassB()
- {
- this.A = new ClassA();
- this.A.OnProcessed += new ClassA.DelegateProcessed(this.ClassA_Processed);
- }
- // class B
- this.A.OnProcessed += new ClassA.DelegateProcessed(this.ClassA_Processed);
- // in classA
- this.OnProcessed -= new ClassA.DelegateProcessed(this.ClassA_Processed);
Add Comment
Please, Sign In to add comment