我现在已经多次找到registring事件处理程序的两种方式。
有什么区别?
public delegate void SomeEventHandler();
public class SomeClass
{
public event SomeEventHandler SomeEvent;
}
static void Main(string[] args)
{
var sc1 = new SomeClass();
sc1.SomeEvent += new SomeEventHandler(a_SomeEventHandler);
var sc2 = new SomeClass();
sc2.SomeEvent += a_SomeEventHandler;
}
答案 0 :(得分:3)
没有区别。
在第一种情况下,我们明确地告诉EventHandler类型,而在第二种情况下,编译器推断出委托的类型。
如果您安装了Resharper,Visual Studio将在第一种情况下淡出sc1.SomeEvent += new SomeEventHandler(a_SomeEventHandler);
行“Redudant explicit delegate creation”
答案 1 :(得分:0)
第二个问题来自于程序员的编码效率。他们给出相同的编译结果。
编译器可以推断第二个作为第一个旧的(或我们可以说是明确的)样式,因为SomeEvent
只能接受第一个的方式。
答案 2 :(得分:0)
第一种语法是C#第一版中唯一的语法。第二种更短的语法后来在语言中引入。
正如其他答案中所解释的那样,它的用途完全相同。没有任何区别。