public class MyEventArgs : EventArgs { private string _someData; public MyEventArgs(string someEventData) { this._someData = someEventData; } } public class Program { public event EventHandler<MyEventArgs> MyOtherEvent; } public void Test() { Program p = new Program(); //p.MyEvent += new Program.MyEventHandler(p_MyEvent); p.MyOtherEvent += new EventHandler<MyEventArgs>(p_MyOtherEvent); } void p_MyOtherEvent(object sender, MyEventArgs e) { throw new NotImplementedException(); }
public class Program { static void Main(string[] args) { DisposableClass a = new DisposableClass(); // Uncommenting the next line will not cause the program to crash, // because there is always a handler present for SomeEvent. (see constructor) a.SomeEvent += new EventHandler<MyEventArgs>(a_SomeEvent); a.SomeMethod(); a.Dispose(); } static void a_SomeEvent(object sender, MyEventArgs e) { Console.WriteLine(e.SomeData); } } public class MyEventArgs : EventArgs { private string _someData; public string SomeData { get { return _someData; } } public MyEventArgs(string someEventData) { this._someData = someEventData; } } public class DisposableClass : IDisposable { private bool _disposed = false; private event EventHandler<MyEventArgs> _someEvent; public event EventHandler<MyEventArgs> SomeEvent { add { _someEvent += value; } remove { _someEvent -= value; } } public DisposableClass() { SomeEvent += (s, e) => { }; } public void SomeMethod() { _someEvent(this, new MyEventArgs("Hello")); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (!_disposed) { if (disposing) { // Dispose managed resources. _someEvent = null; } // Release unmanaged resources. } _disposed = true; } ~DisposableClass() { Dispose(false); } }