2
A
回答
4
这些方法的MSDN文档对此毫无用处。他们有一个“注意到实施者”的短语,要求你称之为基础方法。大多数基本方法实现都很干净,除了引发与方法相关的事件外,什么都不做。因此,如果您重写OnPaint,请执行所有绘画并且不调用base.OnPaint(),则不会引发Paint事件。哪一个工作得很好,但对另一个希望使用Paint事件的程序员来说可能是一个不愉快的惊喜,并且不知道他的代码为什么不起作用。
并非所有这些基本方法都很简单,但它们有时会做额外的工作。像OnFormClosing()一样调用ValidateChildren()。这可能很重要,否则你可能不会意外。控制的复杂性是一个因素。 DataGridView就是一个很好的例子,当你跳过基本的调用时,它不太可能工作。这种错误行为很难诊断。
冒这个险的意义不大,你没有时间机器来告诉你它不会造成麻烦。
这只是一个方面应该关注你,而不是在问题中另有问道。如果您首先调用基本方法,然后编写定制。或者你应该先定制,然后调用基本方法?这是这些方法存在的原因。这取决于你决定谁是老板。
0
基本方法本身会引发事件。
如果你不叫他们,任何正常的处理程序将永远不会运行。
2
除了具体的答案之外,我还想指出,即使您知道(也许通过反编译)该方法什么也不做,总是调用已覆盖的基本方法通常是个好主意。原因是:API提供程序可能会在未来向该方法添加代码,这对于该类正常运行至关重要。这可以通过错误修复或新版本来完成。您无法知道提供程序是否会进行这些更改,以及何时/如果他们这样做,并且您的代码没有调用基本方法,那么在您的代码工作正常的情况下,您将遇到奇怪的问题。
我的规则是总是调用基本方法,除非我有一个非常明确的理由,我必须完全覆盖该基本方法的全部功能。
相关问题
- 1. 覆盖表单事件
- 2. 调用覆盖方法,超类调用覆盖方法
- 3. 调用从覆盖方法中覆盖的方法在OO PHP
- 4. C# - 调用覆盖方法
- 5. 覆盖事件属性
- 6. 覆盖事务方法
- 7. 覆盖主要方法
- 8. 覆盖webBrowser单击事件
- 9. 覆盖方法与不必要的超参数
- 10. 语法来调用未覆盖方法
- 11. django覆盖表单清理方法
- 12. 在coffeescript中调用覆盖的方法
- 13. 在scala中覆盖的调用方法
- 14. 覆盖函数调用的方法
- 15. java的覆盖方法调用
- 16. 覆盖Sharepoint列表事件
- 17. 必要性的getter方法
- 18. 如何扩展模块,覆盖方法,并仍然调用覆盖的方法?
- 19. 需要覆盖的webdriver的方法
- 20. 需要覆盖的XMLWriter的方法
- 21. Python:如何覆盖方法调用中的数据属性?
- 22. 覆盖列表方法
- 23. Java,调用方法和覆盖
- 24. 覆盖equals方法不会被调用
- 25. C++在覆盖方法调用
- 26. 覆盖clen方法和超级调用
- 27. 在Dojo中调用覆盖方法
- 28. R For循环不必要的覆盖
- 29. 覆盖方法
- 30. 覆盖方法
你说的'正常处理程序'究竟是什么? – Acidic
将事件作为事件处理而不是覆盖的任何事情 - 例如,通过visual studio添加的应用程序中的其他代码,这些代码创建事件处理程序以对事件进行反应,而不是覆盖事件。 – BlueMonkMN
但是没有默认的和/或看不见的行为会被不调用基方法打断或干扰? – Acidic