gpt4 book ai didi

c# - 在派生类的构造函数中添加事件处理程序或覆盖 OnX() 方法?

转载 作者:太空狗 更新时间:2023-10-29 23:19:01 24 4
gpt4 key购买 nike

在设计派生类时,在 ctor 中向基类事件添加处理程序与覆盖 OnEventName() 方法并添加一些行为(以及调用基本方法),如果不需要更改基本方法并且不关心事情发生的顺序,而只想要一个具有一些额外行为的可重用组件?

基类:

public abstract class BaseClass
{
public event EventHandler SomeEvent;
protected void OnSomeEvent(object sender, EventArgs e)
{
// do some stuff
}
}

选项A:

public class DerivedA
{
protected override void OnSomeEvent(object sender, EventArgs e)
{
// do some other stuff
base.OnSomeEvent(sender, e);
}
}

选项B:

public class DerivedB
{
public DerivedB()
{
SomeEvent += (o,e) => { // do some other stuff };
}
}

最佳答案

这两种方法都没有任何显着的优点/缺点。

订阅事件与覆盖基类方法之间存在一些差异。例如,如果您希望某些代码在所有其他处理程序之前或之后运行,您应该重写 OnSomeEvent 方法,否则无法保证这一点。但你表示你并不真正关心这个。

一般来说,覆盖方法需要很好地理解基类的行为,以确保您不会无意中破坏任何东西。订阅一个事件是一种侵入性较小的扩展,并且是(大概)基类设计者已经计划好的。

有时,人们会争辩说覆盖时性能会更好 - 但我不赞成这种说法。只有在重要 时,性能才重要。这里的区别可能是如此微不足道,以至于人们应该更关心简单性、正确性和易于维护而不是性能。

关于c# - 在派生类的构造函数中添加事件处理程序或覆盖 OnX() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3120424/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com