"Christopher Wright" <dhase...@gmail.com> wrote in message news:gmfsqa$311...@digitalmars.com... > Kagamin wrote: >> Yeah, C# lambdas are the killer feature. Slick, readable, C-compatible. >> Anders knows his job. Let's face it: delegate literals suck a little, >> mixins as delegates suck a lot, the former is too verbose, the latter >> just sucks. > > C# delegates in C# 2.0 are annoying. I try not to use them. The reason: > D: > void foo(void delegate(int) dg); > > C#: > delegate void SomeName(int i); > void foo(SomeName dg); > > Does C# 3 fix this? I've seen the new syntax for defining delegates, but > not for using them.
C# provided my first introduction to delegates (not counting function-pointers in C), and that oddity actually made it harder for me to really wrap my head around them. Once I did though, I came around to D and thought "Wow! That's so simple!", and it actually helped me understand C#'s delegates better. My only issue with D's delegate-declaration syntax is the semi-messy ordering of "return type, delegate keyword, paramaters, name". Something closer to following would seem much more intuitive to me: void foo(delegate void(int) dg); //or void foo(void dg(int)); //or void foo(delegate(void <- int) dg); //etc... Although, I realize the current way is done to be consistent with function definitions. But, as I mentioned in another branch of the thread, I wouldn't mind function definitions like this: func foo(int <- int x) {return x+1;} //or func foo {(int <- int x) return x+1;} //or func foo {int <- int x :: return x+1;}