C#如何覆盖这样?

时间:2011-07-27 20:59:04

标签: c# override

下面的代码说a()不能覆盖a(),因为wee.a()没有标记为virtual,abstract或override。这有什么方法吗?我需要在super方法中包含代码,但仍想覆盖它!

public abstract class wee
{
  public void a()
  {

  }
}
public class dee : wee
{
  public override void a()
  {
  }
  public void b()
  {
  }
}

3 个答案:

答案 0 :(得分:9)

您需要标记wee.a virtual or abstract

虚拟:

public abstract class wee
{
  public virtual void a()
  {

  }
}

public class dee : wee
{
  public override void a()
  {
  }
  public void b()
  {
  }
}

摘要:

public abstract class wee
{
  public abstract void a();
}

public class dee : wee
{
  public override void a()
  {
  }
  public void b()
  {
  }
}

答案 1 :(得分:2)

它不会覆盖方法,没有标记基础就无法做到这一点。如果您不想像其他人建议的那样修改基础,则可以隐藏基本方法,如下所示:

public class dee : wee
{
    public new void a()
    {
    }
    public void b()
    {
    }
}

答案 2 :(得分:1)

wee.a()标记为virtual - 它允许您提供基本实现,但如果需要,可以选择在子类中覆盖该行为。

// wee
public virtual void a() { // do stuff for base implementation }

// dee
public override void a() { // override behavior implemenation }