Почему я не могу добавить делегата в своем интерфейсе?
Можно использовать любой из них:
public delegate double CustomerDelegate(int test);
public interface ITest
{
EventHandler<EventArgs> MyHandler{get;set;}
CustomerDelegate HandlerWithCustomDelegate { get; set; }
event EventHandler<EventArgs> MyEvent;
}
Делегат является просто другим типом, таким образом, Вы ничего не получаете путем помещения его в интерфейсе.
Вы не должны должны быть создавать своих собственных делегатов. Большую часть времени необходимо просто использовать EventHandler, Func, Предикат или Действие.
май я спрашиваю, на что похож Ваш делегат?
Делегат тип , который не может быть объявлен в интерфейсе. Вы могли бы хотеть к любому использованию событие (если соответствующий), или объявите делегата вне интерфейса, но в том же пространстве имен.
Эта ссылка может помочь - , Когда Использовать Делегатов Вместо Интерфейсов
В документации ясно говорится, что можно определить делегата в интерфейсе:
интерфейс содержит только подписи методов, делегатов или событий.
Однако в комментариях на той же странице, это говорит, что интерфейс может содержать подписи методов, свойств, индексаторов и событий.
, При попытке поместить делегата в интерфейс, в компиляторе говорится, что "интерфейсы не могут объявить типы".
стандарт Ecma-334 (8.9 Интерфейсов) соглашается с комментариями на той странице и компиляторе.
это - ТИП делегата decalaration...
public delegate returntype MyDelegateType (params)
этот наклон быть объявленными в интерфейсе, поскольку это - описание типа
однако с помощью описания типа выше Вас использование CAN экземпляр делегата
MyDelegateType MyDelegateInstance ( get; set;)
, таким образом, экземпляры делегата в порядке, но делегируют описания типа, не (в интерфейсе)