[英]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應該將它們保留下來。
您可以覆蓋MainClass
中聲明的非強制方法, MainClass
是FirstClass
的基類,並為其提供默認功能:
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.