Ver las cuatro líneas en el Go() método siguiente:La diferencia entre la creación delegado implícita y explícita (con y sin genéricos)
delegate void Action<T>(T arg);
delegate void Action();
void DoSomething<T>(Action<T> action)
{
//...
}
void DoSomething(Action action)
{
//...
}
void MyAction<T>(T arg)
{
//...
}
void MyAction()
{
//...
}
void Go<T>()
{
DoSomething<T>(MyAction<T>); // throws compiler error - why?
DoSomething(new Action<T>(MyAction<T>)); // no problems here
DoSomething(MyAction); // what's the difference between this...
DoSomething(new Action(MyAction)); // ... and this?
}
Tenga en cuenta que el error del compilador generada por la primera llamada es: Los argumentos de tipo para el método 'Acción (T)' no se pueden deducir del uso. Intente especificar los argumentos de tipo explícitamente.
No puedo entender cómo esto podría compilar (aisladamente): vacío HacerAlgo (Acción acción) { // ...} Como T no se declara ... Es todo el interior una clase genérica? –
Sí, estoy modificando mi ejemplo ahora. Debería haber leído Go() {... –
Soy yo, pero cuando compilo el código que tienes aquí compila sin ningún error.Suponiendo que coloque el código en una clase no genérica. Estoy usando C# 3.5 SP1 – JoshBerke