У меня есть 4 следующие классы:CS0534 Ошибка - не реализует унаследованный абстрактный член
public abstract class Base
{
abstract public void DoIt();
}
public class TW: Base {}
public class RW: TW
{
public override void DoIt() {}
}
public class IW: TW
{
public override void DoIt() {}
}
Использование:
var transaction = new TW();
transaction.DoIt();
Я не ясно, почему я получаю следующее сообщение об ошибке:
Error CS0534 'TW' does not implement inherited abstract member 'Base.DoIt()'
Если все производные классы «листья» (RW и IW) переопределяют его, почему также (TW) необходимо переопределить его? Я могу что-то потерять, потому что помню, что это было не обязательно. Я не хочу переопределять его в TW, так как у меня нет правильной реализации, чтобы писать там.
я ожидал, чтобы иметь возможность написать что-то вроде:
public override abstract void DoIt();
Что такое правильное выполнение?
UPDATE:
Согласно ответам, которые я получил, и из-за некоторых ограничений, мне придется реализовать его следующим образом:
public override void DoIt()
{
//Not getting to this code, it is overriden by the derived classes
}
Это приемлемо? Я чувствую, что, возможно, что-то в архитектуре ошибочно, если я попаду в такую ситуацию.
Что вы ожидаете от 'нового TW(). DoIt()' делать? Абсолютно * есть требование, чтобы конкретный подкласс обеспечивал отсутствие оставшихся абстрактных членов. Возможно, вы хотите, чтобы «TW» также был абстрактным? (Это не помогает, чтобы ваш код не указывал никаких модификаторов доступа. Пожалуйста, исправьте сообщение, чтобы ошибка * только * была той, которая вам интересна.) –
На самом деле ничего. Только производные классы будут выполнять задания – ehh
Класс tw muste также абстрактный или должен реализовать DoIt, иначе вы получите сообщение об ошибке. – ascholz