簡體   English   中英

從非抽象類繼承

[英]Inherit from a non-abstract class

我有幾個繼承自 BaseClass 的類,BaseClass 有一個名為 GetData 的抽象方法。 在其中一個中,我想基本上再次繼承並提供使用一種名為 GetArticles 的新方法,我從 GetData 調用該方法。 這是代碼。

public abstract class BaseClass
{
    internal abstract void GetData();
}

internal class FirstClass : BaseClass
{
    internal override void GetData()
    {
        // calls GetArticles
    }

    protected void GetArticles()
    {
    }
}

internal class SecondClass : FirstClass
{
    protected new void GetArticles()
    {
    }
}

GetArticles永遠不會在SecondClassSecondClass 它調用FirstClass那個,即使我的對象是SecondClass類型。 我無法在FirstClass Abstract創建GetArticles ,因為我想FirstClass使用FirstClass

有什么建議?

您的方法必須在FirstClass標記為virtual並在SecondClass使用override關鍵字override

internal class FirstClass : BaseClass
{
    internal override void GetData()
    {
        // calls GetArticles
    }

    protected virtual void GetArticles()
    {
    }
}

internal class SecondClass : FirstClass
{
    protected override void GetArticles()
    {
    }
}

new修飾符隱藏了底層的虛方法,這不是你想要的。 在 MSDN 上查看了解何時使用覆蓋和新關鍵字(C# 編程指南)

FirstClass GetArticles聲明為虛擬。 在第二個類中刪除new並添加override

使GetArticles虛擬化。

protected virtual void GetArticles()
{
}

普通類不能包含抽象方法。而抽象類可以包含普通方法。 如果普通類繼承抽象類並持有任何抽象方法,則必須由於派生類中的繼承而被覆蓋。

暫無
暫無

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

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