26

I would like to know what is the difference. Currently I am learning this stuff and it seems to me like these are just the same:

delegate void X();

X instanceOfX;

instanceOfX = delegate() { code };

instanceOfX = () => { code };

Also if the lambda are newer, should I just use lambda and forget on anonymous methods?

lojol
  • 471
  • 1
  • 5
  • 9
  • 3
    Think in terms of evolution of the language. In C# 1, we had delegates. In C# 2, they added anonymous methods. C# 3 added lambdas. Easier ways to accomplish similar tasks. For more on the evolution, I would encourage you to check out the book *C# In Depth*. – Anthony Pegram Feb 08 '11 at 14:58

2 Answers2

19

Yes, lambda expressions are just very special anonymous methods.

However, there are some deep differences. Start with Eric Lippert's Lambda Expression vs. Anonymous Methods, Part One and continue to the rest of the series.

jason
  • 236,483
  • 35
  • 423
  • 525
4

The only difference is the lambda can be easily cast to Expression<Func<void>>. The delegates are purely just methods/closures, but the lambda can also be broken down into an expression tree:

Expression<Func<int, int>> expr = x => x*2; // Expression tree
Func<int, int> fun = x => x*2;              // Function
delegate int MyDelegate(int x);             // Delegate
MyDelegate del = x => x*2;                  // Same as Function and Delegate
Paul F. Wood
  • 1,453
  • 16
  • 19
kelloti
  • 8,705
  • 5
  • 46
  • 82
  • 1
    Note that this is only possible for a subset of lamdas: Expression-lamdas but not statement lamdas. – CodesInChaos Feb 08 '11 at 15:06
  • 4
    Note that "Delegate" is a terrible name for a delegate type because it will be easily confused with System.Delegate, its base class. – Eric Lippert Feb 08 '11 at 15:20
  • 4
    I apologize. I'm still drinking coffee this morning and I honestly couldn't think of another name – kelloti Feb 08 '11 at 15:22