Делегат тип должен быть определен вне функции. Фактический делегат может быть создан внутри метода так же, как и вы.
class MyClass {
delegate int Sum(int a, int b);
public void MyMethod(){
Sum mySumImplementation=delegate (int a, int b) {return a+b;}
Console.WriteLine(mySumImplementation(1,1).ToString());
}
}
будет действителен. Лучшее решение может быть подражать .NET3.5 и создать некоторые универсальные типы делегатов во всем мире, которые могут быть использованы на всем протяжении Вашего решения, чтобы избежать необходимости постоянно переобъявить типов делегата для всего:
delegate R Func<R>();
delegate R Func<T, R>(T t);
delegate R Func<T0, T1, R>(T0 t0, T1 t1);
delegate R Func<T0, T1, T2, R>(T0 t0, T1 t1, T2 t2);
Тогда вам может просто использовать делегата Func<int, int, int>
в вашем коде выше.
«? Почему вы хотите создать тип делегата в рамках метода» - потому что единственное, что использует тип делегата, - это обратный вызов, определенный в методе, поэтому распространение материалов, которые являются концептуально локальными для метода вне метода, чувствует ... icky. – 2015-01-28 20:50:11