OnNavigatedTo覆盖方法中“base.OnNavigatedTo(e)”的用途?

时间:2012-03-08 19:55:45

标签: c# .net windows-phone-7

当覆盖页面中的OnNavigatedTo方法时,他们将这行代码放在:

base.OnNavigatedTo(e);

我一直在删除它,并没有发现任何奇怪的行为。这行代码是什么?我们应该离开吗?或者这就像占位符?

我很确定这不是特定于方法本身的,因为我已经在不同的地方看到了这一点。我的猜测是,它从我们继承的类(在本例中为Page)调用默认的OnNavigatedTo方法。它的存在确实没有意义,因为如果我们想要为什么首先覆盖它?有人可以解释这是如何工作的吗?

3 个答案:

答案 0 :(得分:10)

它不像Android那样挑剔(与SuperNotCalledException崩溃)。但这是一个用例离开它:

  public class BasePage : PhoneApplicationPage
    {
       protected override OnNavigatedTo(....)
    {
        //some logic that should happen on all your pages (logging to console, etc.)
    }
    }

    public class DetailsPage : BasePage
    {
      protected override OnNavigatedTo(....)
    {
    base.OnNavigatedTo(); //the basepage logging, etc.
        //custom page logic (setup VM, querystring parameters, etc.)
    }

}

一般来说,我称之为。如果PhoneApplicationPage的实现发生变化,并且虚拟功能中有更多功能,那么您就不想错过;)

答案 1 :(得分:5)

你可以在反射器中检查这些东西。该框架在InternalOnNavigatedTo方法中执行它的工作,该方法调用空的OnNavigatedTo虚拟方法:

protected virtual void OnNavigatedTo(NavigationEventArgs e) { }

您可以删除该行,它没有任何功能,但这不是一般规则。如果您不知道基本功能是什么,请将呼叫留在那里。

答案 2 :(得分:4)

(不特定于OnNavigatedTo):这是虚拟OnXXX方法(或任何虚方法)的限制 - 派生类正式不知道基类是否具有任何非平凡的功能。因此,您必须深入了解文档(如果存在)或依赖测试来了解您是否应该调用基类。如果你需要使用someones库 - 调用base方法更安全。

在设计自己的库时,有不同的方法可以解决“我是否需要调用虚拟方法的基本实现”。