簡體   English   中英

用虛擬方法覆蓋抽象方法

[英]Overriding an abstract method with a virtual one

我試圖在子類中使用虛方法覆蓋抽象類中的抽象方法。 我(假設到現在?)了解抽象方法和虛方法之間的區別。

顯然我無法做到,但我的問題是......為什么? 基於此處接受的答案和以下場景,我只是沒有看到問題:

    public abstract class TopLevelParent
    {
        protected abstract void TheAbstractMethod();
    }

    public class FirstLevelChild1 : TopLevelParent
    {
        protected override void TheAbstractMethod()
        {

        }
    }

    public class FirstLevelChild2 : TopLevelParent
    {
        protected virtual override void TheAbstractMethod()
        {
            //Do some stuff here
        }
    }

    public class SecondLevelChild : FirstLevelChild2
    {
        //Don't need to re-implement the method here... my parent does it the way I need.
    }

所以,我所做的就是讓一個頂級父級有兩個繼承子級,另一個繼承自其中一個繼承子級。 同樣,根據我在上面發布的鏈接中接受的答案:

“一個虛函數,基本上就是說看,這里的功能對於子類來說可能是也可能不夠好。所以如果它足夠好,使用這個方法,如果沒有,那么覆蓋我,並提供你自己的功能。 “

並且第二級子級將從其父級繼承虛擬方法,從而滿足其最頂層父級的抽象方法的實現要求......問題是什么?

我錯過了某些阻礙我對此理解的細節......

override方法隱式虛擬的(在某種意義上它可以在子類中重寫),除非標記為sealed

注意:

public class FirstLevelChild1 : TopLevelParent
{
    protected override void TheAbstractMethod() { }
}

public class SecondLevelChild1 : FirstLevelChild1
{
    protected override void TheAbstractMethod() { } // No problem
}

public class FirstLevelChild2 : TopLevelParent
{
    protected sealed override void TheAbstractMethod() { }
}

public class SecondLevelChild : FirstLevelChild2
{
    protected override void TheAbstractMethod() { } 
    // Error: cannot override inherited member 
    // 'FirstLevelChild2.TheAbstractMethod()' because it is sealed
}

一個abstract方法已經virtual沿着繼承鏈中的所有的方式-沒有必要宣布其virtual的子類,允許子類覆蓋它-子類已經可以覆蓋它。

如果您提供實現,將使用最接近的實現(向下查看繼承列表)。

暫無
暫無

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

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