Zunächst machen Ihre beiden Beispiele zwei völlig getrennte Dinge. Die erste deklariert eine generische Delegatenvariable und weist ihr einen Wert zu, die zweite definiert lediglich einen delegate
Typ. Ihr Beispiel wäre vollständiger:
public static class Program
{
public delegate string ConvertedMethod(string value);
public static void Main()
{
Func<string, string> convertedMethod = s => s + ", Hello!";
ConvertedMethod convertedMethod2 = s => s + ", Hello!";
}
}
Aber mehr auf den Punkt, beide Func<string,string>
und delegate string convertMethod(string)
wären in der Lage, die gleichen Methodendefinitionen zu halten, egal ob es sich um Methoden, anonyme Methoden oder Lambda-Ausdrücke handelt.
Was Sie verwenden sollten, hängt von der Situation ab. Wenn Sie möchten, dass Ihr Delegat mehr durch das definiert wird, was er benötigt und zurückgibt, sind die generischen Delegaten perfekt. Wenn Sie die Delegierten wollen einige spezielle Namen zu haben , die mehr Definition dessen , was tun , dass Delegierte gibt sollte (über einfache Action
, Predicate
etc) , dann Ihre eigenen Delegierten schaffen , ist immer eine Option.