Метод Invoke был добавлен в делегаты для того, чтобы предоставить удобный и привычный синтаксис вызова делегата. Вместо того чтобы вызывать делегат как обычный метод с использованием круглых скобок, можно использовать метод Invoke без скобок. Это делает код более читабельным и позволяет более естественно выражать намерение вызова делегата.
Метод Invoke не был добавлен непосредственно в класс Delegate потому, что делегаты в .NET имеют подклассы, которые добавляют свои собственные методы и свойства. Класс Delegate является абстрактным базовым классом для всех делегатов, и каждый подкласс имеет свои собственные особенности. Поэтому метод Invoke был добавлен в каждый подкласс в качестве общего метода для вызова делегата.
Делегаты получают доступ к методу DynamicInvoke благодаря функциональности динамического вызова метода, предоставляемой .NET-платформой. Метод DynamicInvoke вызывает делегат с аргументами, переданными в виде массива объектов. При вызове DynamicInvoke происходит дополнительная проверка типов аргументов и обработка возможных исключений. Метод DynamicInvoke не был добавлен в класс Delegate, потому что он является частью функциональности динамического вызова и доступен для всех делегатов через механизм рефлексии.