由于某些原因,今天早上我看了那个代码(wpf)并且感到困惑
protected override void OnMouseEnter(MouseEventArgs e)
{
base.OnMouseEnter(e);
}
通常,我只是用我的代码替换base
来电。
base
通常是否重要?例如,在覆盖OnRender
时,我不会这样做,这是不是很糟糕?如果它是我的班级,那么我显然知道何时打电话以及何时不打电话。
答案 0 :(得分:3)
这取决于基类方法在做什么。例如,在winforms中,如果您覆盖OnLoad
方法但忘记拨打base.OnLoad(e)
,则Form.Load
事件将永远不会触发,因为base.OnLoad(e)
是触发事件的方法。
如此简短的回答将取决于。。
答案 1 :(得分:2)
大多数情况下,最好调用基类,但是,如上所述取决于它。
实际上取决于:
在你的情况下,它可能还有其他一些东西,因为你不知道基本方法究竟做了什么,可能比你想象的更多,你想要添加'你自己的功能。
编辑:(与Sriram Sakthivel的评论):由于Liskov替换原则,在重写方法中做一些不同的事情并不是一个好主意。我的评论:非常正确,但有时你甚至不知道基类的代码,或者你想要做一些不同的事情尽管有这些知识(你可能会在你故意这样做的代码中添加注释)。
答案 2 :(得分:1)
您是否需要调用基本功能没有简单的答案。这取决于您是否要替换基本功能或补充它。如果您不知道基函数的作用,那么在添加补充代码之前先调用基函数可能是您最好的选择。
答案 3 :(得分:1)
除此之外,没有办法在这里给出明确的通用答案:
除非你有充分的理由不这样做,否则你应该在覆盖时调用基本方法。
现在,你怎么知道你有充分的理由不去?那么,您需要知道基本方法的作用,是否需要它,是否可以安全地放弃呼叫等。
换句话说,广义答案是不可能的,这一切都归结为特定情况。