Ok, suppose you define a delegate in some class.
public delegate void StringDelegate (string s);
and another class implements a method :
public static void StringWriter (string s) {...}
In the book that I'm reading "Programming C#" 4th ed they create delegates using the new keyword, ex:
ClassDelegate.StringDelegate writer;
writer = new ClassDelegate.StringDelegate (DelegateImplementer.StringWriter);
writer("Hello");
However, I see one can also call the delegate method this way
ClassDelegate.StringDelegate writer;
writer = DelegateImplementer.StringWriter;
writer ("Hello");
What's the difference? Why do I want instantiate and create an object delegate when I can just simply pass or make reference to the signature of the method delegate.
Both are the same, but the latter syntax was added in C#2 to simplify delegate usage.
Both methods compile to the same byte code.
Sometimes the correct type can't be deduced (like when you're calling a generic), in such a case you need to let the compiler know what kind of delegate you want.
Most of the time, though, naming the method group is easier and clearer.
It's syntactic sugar. Ultimately both sets of code do the same thing.
I'd also note that .Net has a bunch of generic delegates built in that can save you alot of coding. In this case I'd do:
This way you don't even need to create your own delegate.
The two are equivalent. The latter is syntax new with C# 2.0.
There is absolutely no difference between the two statements.
writer = DelegateImplementer.StringWriter;
still creates adelegate
object; the compiler will generate thenew ClassDelegate.StringDelegate ()
for you. It's just a cleaner syntax that was added in C# 2.0.As @Ben Voigt mentioned in his answer is only required in C# 2.0 where the compiler can't deduce the type of the delegate, when using Control.Invoke() for example.