委托声明是否可以从另一个委托声明继承?

时间:2011-12-06 20:49:59

标签: .net generics .net-4.0 delegates

有没有办法在不再输入整个签名的情况下编写以下内容?

//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 个答案:

答案 0 :(得分:3)

不,没有办法做到这一点,尽管如果两个类型参数相同,你可以从CurriedDelegate<T>创建一个BaseDelegate<TProfile, TResult>

在我看来,更好的解决方案是将各种参数封装在一个单独的类型中。这真的是一个非常长的签名开始,并且可能是参数 彼此相关。

(我也试着避免使用这么多out个参数 - 也许你实际上有两个类型要封装在这里,一个用于输入,一个用于输出?)< / p>