21
avril
2007
Lambda expression VS délégués anonymes
avril
2007
Dans le cas d’un délégué anonyme où on utiliserait pas les paramètres, inutiles de les préciser :
class Program
{
static void Main(string[] args)
{
Test t = new Test();
t.MyEvent += delegate
{
Console.WriteLine("toto");
};
t.Toto();
Console.ReadLine();
}
}
public class Test
{
public void Toto()
{
if (MyEvent != null)
MyEvent(this, EventArgs.Empty);
}
public event EventHandler MyEvent;
}
{
static void Main(string[] args)
{
Test t = new Test();
t.MyEvent += delegate
{
Console.WriteLine("toto");
};
t.Toto();
Console.ReadLine();
}
}
public class Test
{
public void Toto()
{
if (MyEvent != null)
MyEvent(this, EventArgs.Empty);
}
public event EventHandler MyEvent;
}
Si vous utilisez une lambda expression à la place du délégué anonyme, impossible d’omettre les paramètres. Il faudra donc écrire :
static void Main(string[] args)
{
Test t = new Test();
t.MyEvent += (object sender, EventArgs e) => Console.WriteLine("toto");
t.Toto();
Console.ReadLine();
}
{
Test t = new Test();
t.MyEvent += (object sender, EventArgs e) => Console.WriteLine("toto");
t.Toto();
Console.ReadLine();
}
En revanche, dans le cas d’une lambda expression, on pourra se passer du type des paramètres, ce qui n’est pas possible avec les délégués anonymes. Notre code deviendrait donc :
static void Main(string[] args)
{
Test t = new Test();
t.MyEvent += (sender, e) => Console.WriteLine("toto");
t.Toto();
Console.ReadLine();
}
{
Test t = new Test();
t.MyEvent += (sender, e) => Console.WriteLine("toto");
t.Toto();
Console.ReadLine();
}
Ceci est mon centième message sur mon blog (hors commentaire). Le tout en 85 jours. Perso je trouve que c’est une bonne moyenne !