gpt4 book ai didi

c# - 在类中使用覆盖而不是事件订阅

转载 作者:太空宇宙 更新时间:2023-11-03 21:12:12 26 4
gpt4 key购买 nike

目前我正在纠结,是否要覆盖现有方法,例如 OnActivate 而不是订阅同一类中的 event

例如我有下面的类,它实现了一个事件:

public class Base
{
public delegate void DoSomeThing(object sender, EventArgs e);

public event DoSomeThing DoSomeThingEventHandler;

public virtual void OnDoSomeThing(EventArgs e)
{
if (DoSomeThingEventHandler != null)
{
DoSomeThingEventHandler(this, e);
}
}
}

我有一个派生自 Base 的类,它希望在 DoSomeThing 被调用时得到通知。我应该覆盖 DoSomeThing 还是应该订阅该事件:

解决方法一:

public class B1 : Base
{
public override void OnDoSomeThing(EventArgs e)
{
// Do some stuff here

base.OnDoSomeThing(e);
}
}

第二种解决方案

public class B2 : Base
{
public B2()
{
DoSomeThingEventHandler += B2_DoSomeThingEventHandler;
}

private void B2_DoSomeThingEventHandler(object sender, EventArgs e)
{
// Do some thing here
}
}

您更喜欢解决方案 B1 还是 B2

谢谢大家!

最佳答案

在这种情况下,覆盖是一个更好的选择,但首先执行基类实现,这样你就不会破坏任何东西,然后在派生类中做任何你想做的事情,比如:

public override void OnDoSomeThing(EventArgs e)
{

base.OnDoSomeThing(e);

// write here whatever needed

}

关于c# - 在类中使用覆盖而不是事件订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36910988/

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