【发布时间】:2010-08-02 08:05:47
【问题描述】:
假设我有一个带有 Page_load() 事件处理程序的基页面类,并且在派生页面类中也有一个 Page_load() 事件处理程序。我意识到您不必编写 vitual 或 override 关键字,并且编译器不会检测到错误。为什么是这样?又为什么要执行基类版本?
【问题讨论】:
标签: asp.net
假设我有一个带有 Page_load() 事件处理程序的基页面类,并且在派生页面类中也有一个 Page_load() 事件处理程序。我意识到您不必编写 vitual 或 override 关键字,并且编译器不会检测到错误。为什么是这样?又为什么要执行基类版本?
【问题讨论】:
标签: asp.net
那些只是事件。
要覆盖,您需要使用Control 上可用的OnLoad 方法。
【讨论】:
尝试覆盖事件触发方法并调用您自己的方法。我无法解释为什么它不抱怨两者,但我知道它们已添加到事件中,因此都在等待执行的队列中。
protected override void OnLoad(EventArgs e)
{
this.Page_Load(this, e);
}
您在此处覆盖的方法除了执行队列中的所有事件处理程序之外没有做任何花哨的事情。请参阅下面 Reflector 的 sn-p:
protected internal virtual void OnLoad(EventArgs e)
{
if (this.HasEvents())
{
EventHandler handler = this._occasionalFields.Events[EventLoad] as EventHandler;
if (handler != null)
{
handler(this, e);
}
}
}
【讨论】:
我错了。确实有关于遮蔽父类方法的警告,但这只是警告,而不是错误。
【讨论】: