2015-01-18 3 views
1

Я хочу иметь делегат для метода, который принимает один параметр и возвращает результат одного и того же типа. Я также хочу, чтобы тип определялся аргументом общего типа, но следующий синтаксис меня не подвел.Общий делегат

delegate T SomeDelegate(T param)<T>; 

Как я мог достичь этого?

+0

Как насчет 'делегата T SomeDelegate (T param);'? – Afflatus

+0

, что тоже не сработает. –

+0

Разве это не просто «Func » –

ответ

2

Вы должны поставить <T> между делегатом Именем и открывающей скобкой: delegate T SomeDelegate<T>(T param);. После закрытия скобки вы можете только сказать, какой тип T должен быть, чтобы быть уверенным, что типы пройдены. Например:

delegate T SomeDelegate<T>(T param) where T : IDisposable; 

Часто это необходимо, чтобы быть уверенным, что Т наследуется Disposable. Таким образом, вы позже можете отличить T как IDposposable и вызвать некоторый метод интерфейса.

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

+0

Типы типов могут также использоваться в качестве ограничений. –

5

Параметр типа должен быть объявлен между методом/именем делегата и регулярным списком параметров:

delegate T SomeDelegate<T>(T param); 
Смежные вопросы