抽象方法声明 - 虚拟?

Moc*_*cco 10 c# oop abstract-class

在MSDN上,我发现在抽象方法声明中使用"虚拟"修饰符是错误的.我的一位同事应该是非常有经验的开发人员,但在他的代码中使用了这个:

public abstract class BusinessObject   
{
    public virtual void Render(){}
    public virtual void Update(){}
}
Run Code Online (Sandbox Code Playgroud)

它也正确与否?

Ali*_*tad 9

如果抽象类提供了一个可选的点,继承的类可以改变行为,那么这是有意义的.

因此,这种方式不会强制继承的类实现它,但如果需要,它们可以.

通常这个方法由抽象类调用:

public AddFoo(Foo f)
{
   // ...
   OnAddedFoo(f);
}
Run Code Online (Sandbox Code Playgroud)

这很有意义的OnAddedFoo作为virtual和不abstract.


her*_*ter 5

我想MSDN意味着你不能virtual同时abstract方法上使用和修饰符.

你可以这样做

public virtual void Render() {}
Run Code Online (Sandbox Code Playgroud)

这意味着继承类可以覆盖此方法.

或者你可以做到

public abstract void Render();
Run Code Online (Sandbox Code Playgroud)

这意味着继承类必须覆盖此方法.


Rob*_*sor 4

这些不是抽象方法,它们是空的默认方法。不同之处在于您不必覆盖它们(如果不这样做,什么也不会发生)。

查看它们的格式可能会帮助您理解:

public abstract class BusinessObject   
{
    public virtual void Render()
    {

    }

    public virtual void Update()
    {

    }
}
Run Code Online (Sandbox Code Playgroud)