I have a very basic question regarding delegate types. I compared the memebers of Delegate
and MulticastDelegate
classes in object browser and I couldn't find any new additional member present in MulticastDelegate
.
I also noticed that the Delegate
class has GetInvocationList
virtual method. So I assume that the Delegate
class should have the capability to hold references to multiple methods. If my assumption is correct, I wonder why not custom delegate types directly derive from the Delegate
class instead of MulticastDelegate
class.
Not sure what I am missing here. Please help me understand the difference.
Basically the split of Delegate
and MulticastDelegate
is for historical reasons. Originally there were going to be delegates which couldn't be combined and ones which could... but that turned out not to be a useful distinction. Apparently that was only discovered when it was a bit too late to rip MulticastDelegate
out of the framework/CLR.
From CLR via C#, 3rd edition:
The
System.MulticastDelegate
class is derived fromSystem.Delegate
, which is itself derived fromSystem.Object
. The reason why there are two delegate classes is historical and unfortunate; there should be just one delegate class in the FCL.
Sadly, you need to be aware of both of these classes because even though all delegate types you create haveMulticastDelegate
as a base class, you'll occasionally manipulate your delegate types by using methods defined by theDelegate
class instead of theMulticastDelegate
class. [...]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With