Event Properties C# with Example



Event Properties C# with Example

If a class raises a large the number of events, the storage cost of one field per delegate may not be acceptable. The 
.NET Framework provides event properties for these cases. This way you can use another data structure like 
EventHandlerList to store event delegates: 
public class SampleClass 
{ 
// Define the delegate collection. 
protected EventHandlerList eventDelegates = new EventHandlerList(); 
// Define a unique key for each event. 
static readonly object someEventKey = new object(); 
// Define the SomeEvent event property. 
public event EventHandler SomeEvent 
{ 
add 
{ 
// Add the input delegate to the collection. 
eventDelegates.AddHandler(someEventKey, value); 
} 
remove 
{ 
// Remove the input delegate from the collection. 
eventDelegates.RemoveHandler(someEventKey, value); 
} 
} 
// Raise the event with the delegate specified by someEventKey 
protected void OnSomeEvent(EventArgs e) 
{ 
var handler = (EventHandler)eventDelegates[someEventKey]; 
if (handler != null) 
handler(this, e); 
} 
} 
This approach is widely used in GUI frameworks like WinForms where controls can have dozens and even hundreds 
of events. 
Note that EventHandlerList is not thread-safe, so if you expect your class to be used from multiple threads, you 
will need to add lock statements or other synchronization mechanism (or use a storage that provides thread 
 

safety). 

0 Comment's

Comment Form