簡體   English   中英

繼承C#中的類

[英]Inherit classes in c#

我有一個抽象類和兩個從該主體類派生的類:

abstract class MainClass
{
    public void DoSomething() {
        if(isEdit())
            Edit();
        else if(isNew())
            New();
        else if(isDelete())
            Delete();
        else if(isSearch())
            Search();
        else if(isExit())
            Exit();
    }

    public abstract void Edit();
    public abstract void New();
    public abstract void Delete();
    public abstract void Search();
    public abstract void Exit();
}

abstract class FirstClass : MainClass
{
    public abstract void Edit();
    public abstract void New();
    public abstract void Delete();
}


abstract class SecondClass : MainClass
{
    public abstract void Search();
    public abstract void Exit();
}

當您需要從FirstClass Edit()擴展時,必須聲明New()Delete() ,並且可以聲明Search()Exit()方法,但這些方法不是必需的。 有什么辦法嗎?

當您需要從FirstClass擴展Edit()時,必須聲明New()和Delete(),並且可以聲明方法Search()和Exit(),但這些方法不是必需的。

這是可能的:

abstract class FirstClass : MainClass
{
    //public abstract void Edit();
    //public abstract void New();
    //public abstract void Delete();

    public override void Search()  { }
    public override void Exit()    { }
}

MainClass中已經將Edit(),New()和Delete()聲明為抽象(必須重寫),因此FirstClass應該將它們保留下來。

將可選方法實現為override s:

abstract class FirstClass : MainClass
{
    public override void Search(){}
    public override void Exit(){}
}

由於它們是在MainClass實現的MainClass您無需在任何繼承的類中實現,但是如果需要 ,可以override它們。

請注意,您無需再次聲明EditNewDelete -它們已經被FirstClass繼承,並且需要由它的任何非抽象繼承者實現。

您可以覆蓋MainClass中聲明的非強制方法, MainClassFirstClass的基類,並為其提供默認功能:

abstract class FirstClass : MainClass
{            
    public override  void Search(){}
    public override  void Exit() {}
}

強制方法不應在FirstClass聲明,因為它們已在MainClass聲明為抽象MainClass 它們在FirstClass仍然是抽象的

可以在子類中可選地聲明的重寫方法(其他方法將從MainClass繼承並保持抽象):

abstract class FirstClass : MainClass
{  
    public override void Search() { /* default implementation */ }
    public override void Exit() { /* default implementation */  }
}

然后

class ThirdClass : FirstClass
{ 
    // Must implement abstract methods
    public override void Edit() { }
    public override void New() { }
    public override void Delete() { }

    // Optionally override 
    public override void Exit() { /* custom implementation */  }
}

abstract關鍵字指示必須由繼承類實現的方法。 虛擬關鍵字表明它可以實現。

將Save()和Exit()標記為虛擬,並提供它們的默認實現(可能為空)。

暫無
暫無

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

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