2010-04-20 22 views
6

Sono confuso perché questo compila:Perché un delegato senza parametri viene compilato?

private delegate int MyDelegate(int p1, int p2); 

    private void testDelegate() 
    { 
     MyDelegate imp = delegate 
     { 
      return 1; 
     }; 
    } 

MyDelegate dovrebbe essere un puntatore a un metodo che prende due parametri int e restituisce un int, giusto? Perché sono autorizzato ad assegnare un metodo che non richiede parametri?

interessante notare che questi non compila (si lamenta i disallineamenti di firma, come mi aspetto)

private void testDelegate() 
    { 
     // Missing param 
     MyDelegate imp = delegate(int p1) 
     { 
      return 1; 
     }; 

     // Wrong return type 
     MyDelegate imp2 = delegate(int p1, int p2) 
     { 
      return "String"; 
     }; 
    } 

Grazie per qualsiasi aiuto!

Ryan

risposta

5

Ebbene, nel primo campione il compilatore può facilmente vedere che nessuno dei parametri vengono utilizzati, e sostituirlo con un paio di manichini.

Questo appare come una decisione di progettazione, da qualche parte sulla strada che da specificare-tutto in .NET 1, attraverso i metodi anonimi in .NET 2 a lambda in .Net 3

6

Il tuo primo esempio è la sintassi breve parte se il delegato non ha bisogno dei parametri. Se è necessario anche uno di essi, è necessario fornire tutti, motivo per cui la prima parte del secondo esempio non verrà compilata.

+0

Grazie mille per la risposta; ha senso Ho contrassegnato quello sopra come "corretto" semplicemente perché è arrivato lì per primo. Grazie! – Ryan

Problemi correlati