Может ли объявление делегата наследоваться от другого объявления делегата? - PullRequest
0 голосов
/ 07 декабря 2011

Есть ли способ написать следующее, не набирая снова всю подпись?

//desired base signature
    public delegate string BaseDelegate<TProfile, TResult>(string requestorID, DateTime sentDate, string serviceID,
        string source, TProfile profile, out DateTime recieved, out DateTime sent, out string psatSystemID, out TResult[] result);

//ugly version of child
public delegate string CurriedDelegate<T>(string requestorId, DateTime sentDate, string serviceId, string source,
T profile, out DateTime recieved, out DateTime sent, out string psatSystemID, out T[] result);

//syntax sugar,doesn't compile
    public BaseDelegate<T,T> CurriedDelegate<T>; //TProfile is same type as TResult

1 Ответ

3 голосов
/ 07 декабря 2011

Нет, этого нельзя сделать, хотя вы могли бы создать CurriedDelegate<T> из BaseDelegate<TProfile, TResult>, если бы два параметра типа были одинаковыми.

Мне кажется, что лучшим решением было бы инкапсулировать различные параметры в отдельный тип в любом случае. Это действительно ужасно длинная подпись, и, вероятно, параметры связаны друг с другом.

(Я бы также постарался избежать использования стольких out параметров - возможно, у вас есть два типа для инкапсуляции здесь, один для ввода и один для вывода?)

...