Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Events and Delegates Order when event is triggered

Tags:

c#

.net

I recently attended a interview in C# where i was asked a question about Events and delegates in C#

The person asked me when a event say button gets clicked, which gets called first event or delegate?

Does the delegate calls the event or the event calls delegate?

Can we have a event without a delegate in c#?

like image 932
uday Avatar asked Oct 18 '11 15:10

uday


People also ask

How does event work with delegate?

Event Delegation is basically a pattern to handle events efficiently. Instead of adding an event listener to each and every similar element, we can add an event listener to a parent element and call an event on a particular target using the . target property of the event object.

What is the main difference between the event and delegate?

Delegate is a function pointer. It holds the reference of one or more methods at runtime. Delegate is independent and not dependent on events. An event is dependent on a delegate and cannot be created without delegates.

Why do we need events when we have delegates?

The main purpose of events is to prevent subscribers from interfering with each other. If you do not use events, you can: Replace other subscribers by reassigning delegate(instead of using the += operator), Clear all subscribers (by setting delegate to null), Broadcast to other subscribers by invoking the delegate.

What are delegates in an event?

A delegate is a type that holds a reference to a method. A delegate is declared with a signature that shows the return type and parameters for the methods it references, and it can hold references only to methods that match its signature. A delegate is thus equivalent to a type-safe function pointer or a callback.


1 Answers

The person asked me when a event say button gets clicked, which gets called first: the event or the delegate?

When you open a door, which gets opened first: the door or the doorknob?

Huh?

That question doesn't make any sense. You open a door with a doorknob, but you don't open a doorknob.

What does it mean to "call" an event? Events aren't things that you call. Events are things that you raise. Raising an event is identical with calling the delegate.

Does the delegate calls the event or the event calls delegate?

Does the door open the doorknob, or does the doorknob open the door?

Again, the question doesn't make sense. A doorknob is not something that can be "opened", and the doorknob does not open the door -- you open the door, by holding the doorknob.

Does the delegate call the event? No; events are not things that can be "called". Does the event call the delegate? No, the code that is raising the event calls the delegate.

Can we have a event without a delegate in c#?

Yes, in the sense that the delegate reference associated with an event can be a null reference. But every event is associated with a delegate type, and somehow has associated with it a reference to a delegate.

The whole set of questions indicates to me that the questioner does not have a very good understanding of the relationship between events and delegates. A good way to think about it is that an event is just a property that contains a reference to a multicast delegate. Whereas a property has special methods that get and set the value of the property, an event has special methods that add and remove delegates to the multicast delegate.

like image 137
Eric Lippert Avatar answered Oct 11 '22 14:10

Eric Lippert