【问题标题】:Why VS automatically adds call to base class virtual method?为什么VS会自动添加对基类虚方法的调用?
【发布时间】:2011-04-08 09:38:27
【问题描述】:

有这样的代码:

class X
{
    public virtual void Test()
    {
    }
}

class Y : X
{
    public override void Test()
    {
        base.Test()   //added automatically, why?
    }
}

【问题讨论】:

    标签: c# inheritance virtual


    【解决方案1】:

    因为,通过暗示,这不会破坏任何东西。

    【讨论】:

    • 如果什么都没有,为什么会很烦人?
    • 并非如此,很多时候您需要扩展方法的功能,最终会在被覆盖的方法中调用base.Method()
    • 通常情况并非如此。您可能希望将其作为抽象方法来强制继承类来实现它。
    【解决方案2】:

    因为在大多数情况下,调用基类实现是有意义的,甚至是必需的,例如虚拟Dispose 方法(基类需要被释放)或WinForms 中的虚拟OnXXX 方法(基类通常从它们的OnXXX 方法中触发一个事件)。

    当然,如果虚拟方法是你的,而你不希望这种行为,我同意这很烦人;)

    【讨论】:

    • 烦人与否,即使是您自己的基本方法也可能会发生变化 - 一些潜在的好东西会发生变化。
    • 当然,但也可能存在不打算使用基类功能的情况。以Object.ToString 为例,您通常不需要基本实现。
    • 完全正确;这就是为什么我觉得在预期行为中以 50 / 50 折腾有点“烦人”。
    猜你喜欢
    • 2017-10-31
    • 2017-04-20
    • 2015-11-17
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    相关资源
    最近更新 更多