По сути, разделение Delegate
и MulticastDelegate
по историческим причинам.Первоначально должны были быть делегаты, которые не могли бы быть объединены , и те, которые могли бы ... но это оказалось не полезным отличием.Очевидно, это было обнаружено только тогда, когда было слишком поздно вырвать MulticastDelegate
из каркаса / CLR.
Из CLR через C #, 3-е издание:
Система.Класс MulticastDelegate является производным от System.Delegate, который сам является производным от System.Object.Причина, по которой существует два класса делегатов, является исторической и неудачной;в FCL должен быть только один класс делегатов.К сожалению, вам необходимо знать оба этих класса, потому что, хотя все создаваемые вами типы делегатов имеют MulticastDelegate в качестве базового класса, вы иногда будете манипулировать типами делегатов с помощью методов, определенных классом Delegate, а не классом MulticastDelegate.[...]