Перш за все, ваші два приклади роблять дві абсолютно різні речі. Перший - декларування загальної змінної делегата та присвоєння йому значення, другий - просто визначення delegate
типу. Вашим прикладом, повніше, буде:
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!";
}
}
Але більш конкретно, як Func<string,string>
іdelegate string convertMethod(string)
буде здатні утримувати той же визначення методу вони методи, анонімні методи, або лямбда - вираз.
Що стосується того, який із них слід використовувати, залежить від ситуації. Якщо ви хочете, щоб ваш делегат був визначений більше за тим, що він приймає і повертає, тоді загальні делегати ідеальні. Якщо ви хочете , делегат мати деякий спеціальну назву , яке дає більше визначення того , що що делегат повинен робити (крім простого Action
, Predicate
і т.д.) , то створюючи свій власний делегат завжди варіант.