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函数中有更多,那么你不想错过;)
(不特定于 OnNavigatedTo):这是虚拟 OnXXX 方法(或任何虚拟方法)的限制 - 派生类正式不知道基类是否具有任何重要功能。因此,您必须深入研究文档(如果存在)或依靠测试来了解是否应该调用基类。如果您需要使用某人的库 - 调用 base 方法是更安全的默认设置。
在设计自己的库时,根据上下文,有不同的方法可以解决“我是否需要调用虚拟方法的基本实现”。
小智 5
你可以在反射器中检查这些东西.该框架在InternalOnNavigatedTo方法中执行它的工作,该方法调用空的OnNavigatedTo虚拟方法:
protected virtual void OnNavigatedTo(NavigationEventArgs e){}
您可以删除该行,它没有任何功能,但这不是一般规则.如果您不知道基本功能是什么,请将呼叫留在那里.
| 归档时间: |
|
| 查看次数: |
3184 次 |
| 最近记录: |