Why use "new DelegateType(Delegate)"?
Solution 1:
There is absolutely no difference between the two statements. writer = DelegateImplementer.StringWriter;
still creates a delegate
object; the compiler will generate the new 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.
Solution 2:
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.
Solution 3:
The two are equivalent. The latter is syntax new with C# 2.0.
Solution 4:
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.
Solution 5:
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:
Action<string> writer;
writer = DelegateImplementer.StringWriter;
writer ("Hello");
This way you don't even need to create your own delegate.