Ok I understand that the answer to this question is pretty simple. But, I have seen many people faltering in interviews when asked this question.
We have a class with a public delegate and a property which exposes an instance of the delegate.
Now TestEvent is a multicast delegate. We can create an instance of the class Temp and add our method to TestEvent
Similarly some other class might create another instance of Temp and add its own method to TestEvent
And when Temp calls RaiseTestEvent method, all methods added to the multicast delegate TestEvent will be called. Now think about this for a moment. Doesn’t an event do exactly the same thing? Subscribers add their event handlers which get called when the event is raised. So, why do we need events and their fancy syntax? For that you should know that events can be raised only by the class which defines it, unlike the public delegate which can be called from outside the class by using the instance of the class in which it is defined. This is the main functionality of an event, where the class that defines it controls when an event needs to be raised.