Vedere le quattro linee del Go() il metodo di seguito:La differenza tra creazione delegato implicito ed esplicito (con e senza farmaci generici)
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?
}
Si noti che l'errore del compilatore generato dalla prima chiamata è: Gli argomenti tipo per il metodo 'Azione (T)' non possono essere dedotti dall'utilizzo. Prova a specificare esplicitamente gli argomenti del tipo.
Non riesco a capire come questo possa compilare (in isolamento): vuoto DoSomething (Azione azione) { // ...} Dal momento che T non è dichiarato ... E 'il tutto all'interno una classe generica? –
Sì, sto modificando il mio esempio ora. Avrebbe dovuto leggere Go() {... –
Sono io ma quando compilo il codice che hai qui compila senza errori.Supponendo che inserisco il codice nella classe non generica. Sto usando C# 3.5 SP1 – JoshBerke