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

Edw*_*ard 10 .net c# windows-phone-7

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

base.OnNavigatedTo(e);
Run Code Online (Sandbox Code Playgroud)

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

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

Wil*_*ani 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.)
    }

}
Run Code Online (Sandbox Code Playgroud)

一般来说,我会称之为.如果PhoneApplicationPage的实现发生了变化,并且Virtual函数中有更多,那么你不想错过;)


Ale*_*kov 5

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

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


小智 5

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

protected virtual void OnNavigatedTo(NavigationEventArgs e){}

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