Просто оставьте метод полностью в классе B. B все равно наследует его от A, и, поскольку сам B является абстрактным, вам не нужно явно реализовывать его снова.
У меня работает в VS2008; без ошибок, без предупреждений. НО, нет причин использовать «переопределение» в B. Этот код эквивалентен:
public abstract class A
{
public abstract void Process();
}
public abstract class B : A
{
}
public class C : B
{
public override void Process()
{
Console.WriteLine("abc");
}
}
Alon -
Это не имеет смысла. Прежде всего, это действительно хорошо компилируется. Во-вторых, абстрактный метод, который вы объявили в A, наследуется (все еще абстрактно) в B. Следовательно, вам не нужно объявлять Process () в классе B.
- Марк
Иногда я видел это вместо неабстрактного виртуального метода абстрактным методом. Например:
public abstract class SomeBaseType
{
/* Override the ToString method inherited from Object with an abstract
* method. Non-abstract types derived from SomeBaseType will have to provide
* their own implementation of ToString() to override Object.ToString().
*/
public abstract override string ToString();
}
public class SomeType : SomeBaseType
{
public override string ToString()
{
return "This type *must* implement an override of ToString()";
}
}