If I have the below code, should I just call the Action or should it call Action.Invoke?
public class ClassA
{
public event Action<string> OnAdd;
private void SomethingHappened()
{
if (OnAdd != null)
OnAdd("It Happened"); //Should it be OnAdd.Invoke("It Happened") ???????
}
}
public class ClassB
{
public ClassB()
{
var myClass = new ClassA();
myClass.OnAdd += Add;
}
private void Add(string Input)
{
//do something
}
}
The two are equivalent, the compiler converts
OnAdd("It Happened");intoOnAdd.Invoke("It Happened");for you.I guess it’s a matter of preference, however I personally prefer the terser form.
As an aside, it is generally preferable to take a local copy of a class level delegate before invoking it to avoid a race condition whereby
OnAddis not null at the time that it is checked, but is at the time that it is invoked: