[英]Abstract method declaration - virtual?
在MSDN上,我發現在抽象方法聲明中使用“虛擬”修飾符是錯誤的。 我的一位同事應該是非常有經驗的開發人員,但在他的代碼中使用了這個:
public abstract class BusinessObject
{
public virtual void Render(){}
public virtual void Update(){}
}
它也正確與否?
如果抽象類提供了一個可選的點,繼承的類可以改變行為,那么這是有意義的。
因此,這種方式不會強制繼承的類實現它,但如果需要,它們可以。
通常這個方法由抽象類調用:
public AddFoo(Foo f)
{
// ...
OnAddedFoo(f);
}
將OnAddedFoo
作為virtual
而非abstract
是有意義的。
我想MSDN意味着你不能同時在方法上使用virtual
和abstract
修飾符。
你可以這樣做
public virtual void Render() {}
這意味着繼承類可以覆蓋此方法。
或者你可以做到
public abstract void Render();
這意味着繼承類必須覆蓋此方法。
那些不是抽象的方法,它們是空的默認方法。 區別在於你沒有必須覆蓋它們(如果你不這樣做,什么都不會發生)。
它可能有助於您理解它們的格式如下:
public abstract class BusinessObject
{
public virtual void Render()
{
}
public virtual void Update()
{
}
}
你可能會參考這句話
您不能將virtual修飾符與static,abstract,private或override修飾符一起使用。
這意味着你不能在方法聲明中使用它,一個方法不能同時虛擬和抽象。
所以你提出的用法很好,因為這個類是抽象的,這意味着你可以有一些抽象的方法(沒有必須由子類實現的實現)和虛方法(可以在子節點中覆蓋的實現)類)。
Follwing代碼意味着您必須在繼承的類中保留此方法,並且您不能在抽象方法體中放置一些邏輯:
public abstract void Render();
但是如果你聲明虛方法,你可以在其中加入一些邏輯並且可以使用
public virtual void Render()
{
// you can put some default logic here
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.