C # как переопределить, как это? - PullRequest
1 голос
/ 28 июля 2011

код ниже говорит, что () не может переопределить (), так как wee.a () не помечен как виртуальный, абстрактный или переопределенный. Есть ли способ обойти это? Мне нужно иметь код внутри метода super, но я все еще хочу переопределить его!

public abstract class wee
{
  public void a()
  {

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

Ответы [ 3 ]

9 голосов
/ 28 июля 2011

Вам нужно отметить wee.a виртуальный или абстрактный .

Virtual:

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

  }
}

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

Abstract:

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

public class dee : wee
{
  public override void a()
  {
  }
  public void b()
  {
  }
}
2 голосов
/ 28 июля 2011

Это не будет переопределять метод, нет способа сделать это без маркировки базы как таковой.Если вы не хотите изменять базу, как предлагали другие, вместо этого вы можете скрыть метод базы следующим образом:

public class dee : wee
{
    public new void a()
    {
    }
    public void b()
    {
    }
}
1 голос
/ 28 июля 2011

Пометить wee.a() как virtual - это позволяет вам предоставить базовую реализацию, но при необходимости дает возможность переопределить это поведение в подклассах.

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

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