0

抽象クラスと、このプリンシパル クラスから派生した 2 つのクラスがあります。

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()andDelete()を宣言する必要があり、メソッドと メソッドSearch()Exit()宣言することはできますが、必須ではありません。それを行う方法はありますか?

4

5 に答える 5

3

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()    { }
}

Edit()、New()、およびDelete()は、MainClassですでに抽象として宣言されている(オーバーライドする必要がある)ため、FirstClassはそれらをそのままにしておく必要があります。

于 2013-01-23T13:47:23.467 に答える
2

オプションのメソッドを次のように実装しますoverride

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

それらはで実装されているためMainClass、継承クラスに実装する必要はありませんが、必要に応じて実装できますoverride

再宣言する必要はないことに注意してください。またEdit、それらはすでに継承されており、非抽象継承者によって実装される必要があります。NewDeleteFirstClass

于 2013-01-23T13:46:15.640 に答える
0

MainClassの基本クラスであると宣言されている必須ではないメソッドをオーバーライドしてFirstClass、デフォルトの機能を提供できます。

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

必須メソッドはFirstClass、ですでに抽象として宣言されているため、で宣言しないでくださいMainClass。それらは抽象のままですFirstClass

于 2013-01-23T13:46:47.050 に答える
0

子クラスでオプションで宣言できるメソッドをオーバーライドします(他のメソッドは継承され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 */  }
}
于 2013-01-23T13:47:01.013 に答える
0

abstractキーワードは、メソッドが継承クラスによって実装されなければならないことを示します。virtualキーワードは、実装できることを示します。

Save()とExit()を仮想としてマークし、それらのデフォルト(場合によっては空)の実装を提供します。

于 2013-01-23T13:48:25.823 に答える