簡體   English   中英

如果虛擬方法被聲明為abstract

[英]If a virtual method is declared abstract

我的朋友問我抽象方法是否可以有虛擬修飾符。 我說, 因為抽象方法也隱式也是虛方法,所以它不能具有虛擬修飾符。

但在閱讀MSDN文章之一時 ,我看到了這一點:

...如果虛擬方法被聲明為abstract ,則它仍然是從抽象類繼承的任何類的虛擬方法。 繼承抽象方法的類無法訪問方法的原始實現 - 在前面的示例中,類F上的DoWork無法在類D上調用DoWork。這樣,抽象類可以強制派生類為虛方法提供新方法實現....

我無法正確理解第一句話。 你能不能解釋一下他們想說什么?

謝謝。

當您查看引用段落正上方的代碼示例時,它會變得更清晰:

public class D
{
    public virtual void DoWork(int i)
    {
        // Original implementation.
    }
}

public abstract class E : D
{
    public abstract override void DoWork(int i);
}

虛擬方法D.DoWorkE繼承,並且在那里聲明為abstract。 該方法仍然虛擬的 ,它也剛剛變得抽象

正確地說,抽象方法總是虛擬的。 如果你的朋友仍然不相信,這里有一個官方報價

抽象方法隱含地是虛方法。

抽象類可以使用abstract類覆蓋virtual成員:

public class B
{
    public virtual void M() { }
}
public abstract class D : B
{
    public abstract override void M();
}
public abstract class D2 : D
{
    public override void M() { }
}

句子說D2 必須覆蓋void M() ,因為它在D被聲明為abstract。 如果它被聲明為D2 : B ,這將是可選的,但是就目前而言, D2必須遵守D指定的合同,但M()也將像任何其他成員一樣覆蓋“正常”虛擬成員,因為M()既是虛擬的也是抽象的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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