基础调用Overriden表单事件方法的必要性

时间:2011-12-07 21:34:01

标签: c# .net winforms visual-studio-2010

当覆盖表单的事件方法时,我到目前为止看到调用基本方法和不调用它之间没有区别。

- 被覆盖的方法到底做了什么?

提前致谢。

3 个答案:

答案 0 :(得分:4)

这些方法的MSDN文档对此没有任何影响。他们有一个“实施者注意”短语要求你称之为基本方法。大多数基本方法实现都很干净,除了引发与该方法相关的事件之外什么都不做。因此,如果您重写OnPaint,请执行所有绘制而不调用base.OnPaint(),然后不会引发Paint事件。哪个效果不错,但对于想要使用Paint事件并且不知道为什么他的代码不起作用的另一个程序员来说可能是一个令人不快的惊喜。

并非所有这些基本方法都那么简单,但它们有时会做额外的事情。像OnFormClosing()一样调用ValidateChildren()。这可能很重要,或者你可能不会意外。控制的复杂性是一个因素。一个很好的例子是DataGridView,当你跳过基本调用时它不太可能正常工作。这种错误的行为很难诊断。

冒这个风险没什么意义,你没有时间机器告诉你它不会造成麻烦。

关于这个问题,只有一个方面应该关注你,而不是在问题中另有说明。您应该首先调用基本方法,然后编写自定义。或者您应该首先自定义,然后调用基本方法?这就是这些方法存在的原因。由你决定谁是老板。

答案 1 :(得分:2)

除了具体的答案之外,我还想指出,即使你知道(可能通过反编译)该方法什么也不做,总是调用你已经覆盖的基本方法通常是一个好主意。原因是:API提供程序可能会在将来向该方法添加代码,以使该类正常运行。这可以通过错误修复或新版本来完成。您无法知道提供商是否会进行这些更改以及何时/如果他们这样做并且您的代码没有调用基本方法,那么一旦您的代码工作正常,您就会遇到奇怪的问题。

我的规则是始终调用基本方法,除非我有一个非常清楚的理由说明为什么我必须完全覆盖该基本方法的整个功能。

答案 2 :(得分:0)

基础方法本身会引发事件。

如果你不打电话给他们,任何普通的处理程序都不会运行。