Объявление делегата явно может помочь с некоторыми проверками типов.Компилятор может убедиться, что делегат, назначенный переменной, предназначен для использования в качестве ChangeListAction, а не случайного действия, которое оказывается совместимым с сигнатурой.
Однако реальная ценность объявления вашего собственного делегата заключается в том, чтоэто дает ему смысловой смысл.Человек, читающий код, будет знать, что делает делегат, по его имени.Представьте, что у вас есть класс с тремя полями int, но вместо этого вы объявили массив из трех элементов int.Массив может делать то же самое, но имена полей приносят семантическую информацию, которая полезна для разработчиков.
Вы должны использовать делегаты Func, Predicate и Action при разработке библиотеки общего назначения, такой как LINQ.В этом случае делегаты не имеют предопределенной семантики, за исключением того факта, что они будут выполняться и действовать или использоваться в качестве предиката.
На заметке сторон есть аналогичная проблема компромисса с Tuple против анонимного типа противобъявив свой собственный класс.Вы можете просто вставить все в Tuple, но тогда свойства будут просто Item1, Item2, которые ничего не говорят об использовании типа.