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

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

base.OnNavigatedTo(e); 

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

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

它不像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的实现发生了变化,并且虚拟function中有更多function,那么您不想错过;)

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

protected virtual void OnNavigatedTo(NavigationEventArgs e){}

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

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

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