Ale*_*sev 24 c# virtual overriding
当使用一些框架/ api时,有时候你不清楚是否必须调用base.Method如果你覆盖它,例如你可以非常肯定你应该在覆盖事件调用器时调用base.Maethod()来传播事件在其他情况下,特别是当没有可用的源代码且没有评论时,它可能不那么清楚.
我wounder其他程序员如何决定他们应该调用基方法或没有在这种情况下,如果你是要写一些框架如何通知你期望的基础方法,在虚拟的成员被称为与否其他程序员.
Ale*_*sev 19
现在我不认为覆盖方法的类的消费者应该需要调用base.Method().代码应该以不会被破坏的方式编写.
public class MyBase
{
private void FooInternal()
{
DoRequiredStuff();
Foo();
}
public virtual void Foo() {}
}
Run Code Online (Sandbox Code Playgroud)
如果您要求您的类的消费者必须实现特定方法的功能,则该方法应标记为抽象.
如果您的类的使用者应该可选地提供特定方法的功能,那么该方法应该是虚拟的.
实际上没有办法要求类的使用者在虚方法上调用base.Method().这真的取决于背景.如果base.Method()执行了一些你不得不做的工作,你应该调用base.Method(),如果这样可以节省一些开发时间/它在该上下文中是有意义的.
小智 7
这取决于是否需要使用底层功能.
例如,如果基础对象具有一些需要运行的通用数据库功能,请在最后调用基本方法.如果您的代码覆盖了基本方法将设置的一些属性,那么首先调用基本方法.
如果没有源代码或文档,RedGate的.Net Reflector(http://www.red-gate.com/products/dotnet-development/reflector/)可以解压缩您尝试使用的程序集,您可以看到代码有效.
| 归档时间: |
|
| 查看次数: |
8788 次 |
| 最近记录: |