I have these two sample classes:
void Main()
{
Provider1 myProvider1 = new Provider1();
myProvider1.MyEvent += (sender, eventData) => Console.WriteLine($"the event1 handled : {eventData.Data}");
myProvider1.DoSth();
//
Provider2 myProvider2 = new Provider2();
myProvider2.MyEvent = (sender, eventData) => Console.WriteLine($"the event2 handled : {eventData.Data}");
myProvider2.DoSth();
}
public class SampleEventArgs : EventArgs
{
public string Data { get; }
public SampleEventArgs(string data)
{
Data = data;
}
}
public class Provider1
{
public event EventHandler<SampleEventArgs> MyEvent;
public void DoSth()
{
MyEvent?.Invoke(this, new SampleEventArgs("TestData"));
}
}
public class Provider2
{
public Action<object, SampleEventArgs> MyEvent;
public void DoSth()
{
MyEvent?.Invoke(this, new SampleEventArgs("TestData"));
}
}
Provider1
has a event MyEvent
and Provider2
has a Action<object> MyEvent
(to act just like the event
in Provider1
).
I can achieve the same result from both of them, but I want to know when to use each pattern and why (I know that Action
is just a delegate
).
Updated based on comments