1

明示的に実行せずに抽象クラスからメソッドを実行する方法はありますか(つまり、それを継承する同じメソッド名があり、抽象からのものとルーチンを継承したものの両方を実行したいということです) )? または任意の種類のメソッド (仮想オーバーライドまたは通常) またはそうでない場合は、base.checker() を使用せずに使用できますか?

public abstract class absclass1{
    protected void Checker(){
        Console.WriteLine("from absclass1");
    }
}

public class sample1 : absclass1
{
    protected void Checker(){
        Console.WriteLine("from sample1");
    }
}

次のように実行するクラスがある場合:

public class main{
    public void main(){
    sample1 runner = new sample1();
    runner.checker();
    }
}

出力を次のようにしたいと思います。

from absclass1
from sample

アブストラクトと継承からの checker という名前の 2 つのメソッドが実行されることを期待しています。継承者のチェッカーで?ありがとう、私がしようとしていることが変だとか簡単だと思ったらごめんなさい。可能であれば、私にとって役立つとわかっているベストプラクティスをいくつか掲載してください。

ps私の質問に何か問題があると思われる場合は、自由に編集してください

4

2 に答える 2

4

sample1クラスからbase (absclass1) を呼び出すことができます。

public class sample1 : absclass1
{
protected void Checker(){

  base.Checker()
  console.writeln("from sample1");
 
}

}

したがって、実行すると:

public class main{
    public void main(){
    sample1 runner = new sample1();
    runner.checker();
    }
}

出力は次のようになります。

absclass1 から

サンプルから

于 2013-05-24T06:38:44.647 に答える
2

電話しないと無理だと思いますbase.Checker。メソッドが自動的に呼び出されるのは、コンストラクター内だけです。したがって、コードはbase.Checker目的の結果を得るために呼び出す必要があります。

public abstract class absclass1
{
    protected void Checker() {
        Console.WriteLine("from absclass1");
    }
}

public class sample1 : absclass1
{
    protected void Checker() {
        Console.WriteLine("from sample1");
        base.Checker();
    }
}

これは出力されます:

from sample1
from absclass1

メソッドが機能するようにコンストラクターが機能することを示すためだけに:

public abstract class absclass1
{
    protected absclass1() {
        console.writeln("from absclass1");
    }
}

public class sample1 : absclass1
{
    public sample1 () {
        console.writeln("from sample1");
    }
}

これも出力されます:

from sample1
from absclass1

唯一の違いは、コンストラクター呼び出しはもちろん一度だけ呼び出されるのに対し、通常のメソッドはいつでも呼び出すことができるということです。

于 2013-05-24T06:40:08.463 に答える