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 的两个方法,或者我真的需要放置 base.checker(); 在继承人的检查员处?谢谢,对不起,如果您认为我正在尝试的东西很奇怪或很容易。如果可能的话,请找到一些您知道对我有用的最佳实践。

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 回答