Kan een gedelegeerde verklaring erven van een andere gedelegeerde verklaring?

Is er een manier om het volgende te schrijven zonder de hele handtekening opnieuw in te typen?

//desired base signature
    public delegate string BaseDelegate(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(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 CurriedDelegate; //TProfile is same type as TResult
0

1 antwoord

No, there's no way of doing that, although you could create a CurriedDelegate from a BaseDelegate if the two type parameters were the same.

Het lijkt mij een betere oplossing om de verschillende parameters toch in een apart type in te kapselen. Dat is echt een vreselijk lange handtekening om mee te beginnen, en vermoedelijk zijn de parameters gerelateerd aan elkaar.

(Ik zou ook proberen te voorkomen dat ik zoveel out -parameters gebruik - misschien heb je hier echt twee -typen om in te kapselen, een voor invoer en een voor uitvoer?)

3
toegevoegd
Ja, de code die ik bel, is buiten bereik om op te ruimen in deze fase van het project. van wat ik in de meeste gevallen kan zien, worden 2 parameters uit de partij zelfs helemaal gebruikt in 98% van de servicelaag. Als je zegt dat ik een CurriedDelegate kan maken, bedoel je instantiëren, geen korte/zoete handtekening definiëren, toch? In> 80% van de servicelaagcode TProfile en TResult zijn hetzelfde.
toegevoegd de auteur Maslow, de bron
@Maslow: Ja, als u al een BaseDelegate had, kon u nieuwe CurriedDelegate (existingDelegate) gebruiken.
toegevoegd de auteur Jon Skeet, de bron