Why use “new DelegateType(Delegate)”?

前端 未结 5 1074
时光取名叫无心
时光取名叫无心 2020-12-06 07:15

Ok, suppose you define a delegate in some class.

public delegate void StringDelegate (string s);

and another class implements a method :

相关标签:
5条回答
  • 2020-12-06 07:31

    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.

    0 讨论(0)
  • 2020-12-06 07:40

    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.

    0 讨论(0)
  • 2020-12-06 07:40

    The two are equivalent. The latter is syntax new with C# 2.0.

    0 讨论(0)
  • 2020-12-06 07:42

    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.

    0 讨论(0)
  • 2020-12-06 07:47

    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.

    0 讨论(0)
提交回复
热议问题