簡體   English   中英

抽象方法聲明 - 虛擬?

[英]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意味着你不能同時在方法上使用virtualabstract修飾符。

你可以這樣做

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM