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)
它也正确与否?
如果抽象类提供了一个可选的点,继承的类可以改变行为,那么这是有意义的.
因此,这种方式不会强制继承的类实现它,但如果需要,它们可以.
通常这个方法由抽象类调用:
public AddFoo(Foo f)
{
// ...
OnAddedFoo(f);
}
Run Code Online (Sandbox Code Playgroud)
这很有意义的OnAddedFoo作为virtual和不abstract.
我想MSDN意味着你不能virtual同时abstract在方法上使用和修饰符.
你可以这样做
public virtual void Render() {}
Run Code Online (Sandbox Code Playgroud)
这意味着继承类可以覆盖此方法.
或者你可以做到
public abstract void Render();
Run Code Online (Sandbox Code Playgroud)
这意味着继承类必须覆盖此方法.
这些不是抽象方法,它们是空的默认方法。不同之处在于您不必覆盖它们(如果不这样做,什么也不会发生)。
查看它们的格式可能会帮助您理解:
public abstract class BusinessObject
{
public virtual void Render()
{
}
public virtual void Update()
{
}
}
Run Code Online (Sandbox Code Playgroud)