Przede wszystkim, dwa przykłady robią dwie całkowicie odrębne rzeczy. Pierwszym jest deklarowanie ogólnej zmiennej delegującej i przypisywanie jej wartości, a drugim jest właśnie określenie typu delegate
. Twój przykład, pełniej, byłoby:
public static class Program
{
// you can define your own delegate for a nice meaningful name, but the
// generic delegates (Func, Action, Predicate) are all defined already
public delegate string ConvertedMethod(string value);
public static void Main()
{
// both work fine for taking methods, lambdas, etc.
Func<string, string> convertedMethod = s => s + ", Hello!";
ConvertedMethod convertedMethod2 = s => s + ", Hello!";
}
}
Ale bardziej na miejscu, zarówno Func<string,string>
i delegate string convertMethod(string)
byłby w stanie utrzymać te same definicje metod czy są sposoby, metody anonimowe, lub wyrażenia lambda.
Do czego należy użyć, zależy od sytuacji. Jeśli chcesz, aby Twój delegat był bardziej zdefiniowany przez to, co przyjmuje i wraca, to generyczni delegaci są doskonali. Jeśli chcesz, aby delegat miał jakąś specjalną nazwę, która daje więcej definicji tego, co delegat powinien zrobić (poza prostymi Action
, Predicate
, itp.), Tworzenie własnych delegatów jest zawsze opcją.
możliwe duplikat [stwierdzenie pełnomocnik ręcznie lub używać funkc Działanie ?] (Http://stackoverflow.com/questions/4482613/declare-delegate-manually-use-funct -lub-actiont) –
nawfal