2010-02-22 15 views
14

Estoy intentando que funcione el siguiente ejemplo simple de delegado. De acuerdo con un libro que he tomado de él debería estar bien, pero me sale un error Method name expected.Delegado: Nombre del método error esperado

namespace TestConsoleApp 
{ 
    class Program 
    { 
     private delegate string D(); 

     static void Main(string[] args) 
     { 
      int x = 1; 

      D code = new D(x.ToString()); 

     } 
    } 
} 

¿Algún ayuda?

Respuesta

31

Retire la():

D code = new D(x.ToString); 

¿Quieres especificar el método, no ejecutar ella.

0

Trate de quitar los corchetes del final del método, está pasando el método, por lo tanto, no es necesario utilizar los corchetes.

0
D code = new D(x.ToString); // Note the:() 

Necesitas pas el método a ejecutar en el delegado. Lo que estás haciendo es pasar el valor en lugar de la firma de la función.

5

pienso decir:

D code = new D(x.ToString); 

nota la falta de soportes. Con los corchetes activados, era un método invocación - es decir, si estaba intentando ejecutar x.ToString() en esa línea de código. Sin los corchetes, es un grupo de métodos - una expresión que le dice al compilador que mire los métodos disponibles con ese nombre (en ese contexto), precisamente con el propósito de crear delegados.

¿Qué libro estás usando? Si realmente tiene los corchetes en los ejemplos que muestra, puede enviar un correo electrónico al autor (o al menos consultar la página de erratas del libro). Si se trata de C# en profundidad, Voy a llorar en un rincón ...

+0

+1, una vez más buena y buena explicación! :-) –

0

debe ser:

D code = new D(x.ToString); 
3

que necesita para alimentar un método en el constructor delegado.

x.ToString() 

no es un método, sino una cadena. Use

D code = new D(x.ToString); 
Cuestiones relacionadas