你会这样做:
this.btSomeButton.Click += btSomeButton_OnClick;
private void btSomeButton_OnClick(object sender, EventArgs e)
{
this.DoFunc1();
this.DoFunc2();
}
或者:
this.btSomeButton.Click += DoFunc1;
this.btSomeButton.Click += DoDunc2;
使用第二种方法有任何隐藏的含义吗?比如,是否保证DoFunc2()将在DoFunc1()之后运行?
答案 0 :(得分:2)
我认为第一种方法更安全。
AFAIK无法保证方法执行顺序,如果方法确实按顺序进行,则第一种方法更有意义。
此外,当多个事件处理程序附加到事件时,在分离单个事件处理程序时很容易错过其他事件。
答案 1 :(得分:0)
我也是第一个......
在2个例子中,性能应该非常接近,但#1更容易阅读imho - 但是,它取决于他们在做什么。我更喜欢这个例子:
this.btSomeButton.Click += DoSomethingRelatedToDataPersistence;
this.btSomeButton.Click += DoSomethingRelatedToTheDirectionTheMoonSpinsAroundTheEarth;
..我希望你抓住我的漂移:P
如果您可以将2个事件处理程序绑定到1个通用程序(从域视角说话),我会这样做。如果处理程序完全不相关,我会将它们保存在不同的处理程序中。
答案是非常主观的imho。没有人能够提供“最终答案,案件结案”-kinda答案。
答案 2 :(得分:0)
我会使用第一个,只是因为它是传统的做法,对其他开发者来说更清楚。事件处理程序杂耍很难在任何情况下追踪,所以尽可能给每个人提供帮助。
答案 3 :(得分:0)
取决于
如果以下所有(或大多数)都为真,我会使用第二个选项:
如果订单很重要,首先必须选择,因为它很清楚。我不知道C#语言规范是否保证第二个选项中的顺序。
答案 4 :(得分:0)
MulticastDelegate有一个委托链表,称为调用列表,由一个或多个元素组成。调用多播委托时,调用列表中的委托按照它们出现的顺序同步调用。
但是,如果你关心调用的顺序,我不会依赖于此,我将使用第一种方法或下面的方法。
如果你喜欢语法,你可以做到这两点,但是想要两个调用的功能抽象......
this.btSomeButton.Click += (sender, args)
{
this.doFunc1();
this.doFunc2();
};
答案 5 :(得分:0)
出于单一(主观)原因,我更喜欢第一种选择。
这更具描述性,后来人们更容易理解。如果事件是人们以后需要取消订阅的事件,那么这一点就变得非常重要 - 有一个需要取消订阅的事件更有可能被未来的其他人正确处理,而不是2个事件。
由于您询问了执行顺序,这表明这两个功能是相关的。这样做会强制将事件取消订阅,因此不可能取消订阅func1()而不取消func2(),如果您担心执行顺序(这可能是有保证的,这可能是非常关键的) )。