Почему я не могу поместить делегата в интерфейс?

Почему я не могу добавить делегата в своем интерфейсе?

28
задан Gavin Miller 4 March 2009 в 23:29
поделиться

5 ответов

Можно использовать любой из них:

public delegate double CustomerDelegate(int test);
public interface ITest
{
    EventHandler<EventArgs> MyHandler{get;set;}
    CustomerDelegate HandlerWithCustomDelegate { get; set; }
    event EventHandler<EventArgs> MyEvent;
}
33
ответ дан eglasius 14 October 2019 в 09:59
поделиться

Делегат является просто другим типом, таким образом, Вы ничего не получаете путем помещения его в интерфейсе.

Вы не должны должны быть создавать своих собственных делегатов. Большую часть времени необходимо просто использовать EventHandler, Func, Предикат или Действие.

май я спрашиваю, на что похож Ваш делегат?

24
ответ дан Jonathan Allen 14 October 2019 в 09:59
поделиться

Делегат тип , который не может быть объявлен в интерфейсе. Вы могли бы хотеть к любому использованию событие (если соответствующий), или объявите делегата вне интерфейса, но в том же пространстве имен.

Эта ссылка может помочь - , Когда Использовать Делегатов Вместо Интерфейсов

7
ответ дан cgreeno 14 October 2019 в 09:59
поделиться

В документации ясно говорится, что можно определить делегата в интерфейсе:

интерфейс содержит только подписи методов, делегатов или событий.

MSDN: интерфейс (Ссылка C#)

Однако в комментариях на той же странице, это говорит, что интерфейс может содержать подписи методов, свойств, индексаторов и событий.

, При попытке поместить делегата в интерфейс, в компиляторе говорится, что "интерфейсы не могут объявить типы".

стандарт Ecma-334 (8.9 Интерфейсов) соглашается с комментариями на той странице и компиляторе.

4
ответ дан Guffa 14 October 2019 в 09:59
поделиться

это - ТИП делегата decalaration...

public delegate returntype MyDelegateType (params)

этот наклон быть объявленными в интерфейсе, поскольку это - описание типа

однако с помощью описания типа выше Вас использование CAN экземпляр делегата

MyDelegateType MyDelegateInstance ( get; set;)

, таким образом, экземпляры делегата в порядке, но делегируют описания типа, не (в интерфейсе)

7
ответ дан Matt 14 October 2019 в 09:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: