Я получаю класс из базового абстрактного класса. Мой абстрактный класс имеет четыре абстрактных метода. Я не хочу переопределять все методы в производном классе. Как мне это сделать, не объявляя производный класс абстрактным классом?Обход одного из методов абстрактного класса в производном классе без создания производного класса абстрактный класс
ответ
Не-абстрактный класс, производный от абстрактного класса сусла включает фактические реализаций всех унаследованных абстрактных метод и аксессорах (MSDN)
Вы не можете сделать это. Когда вы обход, вы имеете в виду не выполнять их. Это означает, что производный класс не полностью построен. Как создать экземпляр такого типа? Такие типы действительно должны быть несовместимыми, ака абстрактными.
Но есть способы игнорировать такие невежественные методы в производном классе во время выполнения. Вы можете сделать это виртуальным так, что ее означали для дальнейших производных классов, чтобы переопределить (и бросать исключения во время выполнения)
abstract class Vehicle
{
public abstract void Do();
}
class Car : Vehicle
{
public virtual void Do(){ throw InvalidOperationException(); }
}
class Hyundai : Car
{
public override void Do(){ //implementation }
}
Возможно, альтернатива, чтобы сделать ваш базовый класс интерфейса и явно их реализации в производном классе (который скрыть его до некоторой степени).
interface Vehicle
{
void Do();
}
class Car : Vehicle
{
void Vehicle.Do()
{
throw new InvalidOperationException();
}
}
class Hyundai : Car
{
//Do is not available here unless you cast it to base type, ie Vehicle
}
Не используйте для этой цели 'NotImplementedException'. Если намерение, которое вы хотите выразить, - «операция недействительна», используйте «InvalidOperationException». Используйте «NotImplementedException» во время разработки в качестве маркера для кода, который * будет разработан, но еще не выполнен *, а затем удалите их все перед отправкой. Если вы используете «NotImplementedException», чтобы означать, что «это намеренно не реализовано» и «это предназначено для реализации», вы настраиваете себя на путаные ошибки. –
@EricLippert справедливая точка, имеет смысл, спасибо. Обновит его. – nawfal
- 1. Вывести абстрактный класс из не-абстрактного класса
- 2. Использование частного абстрактного метода в производном классе
- 3. Интерфейс, абстрактный класс и методы абстрактного класса
- 4. Создать экземпляр производного абстрактного класса в C++
- 5. Изменение прав доступа от абстрактного класса в производном классе
- 6. вызова абстрактный метод из абстрактного класса конструктора
- 7. Как избежать реализации методов из абстрактного класса?
- 8. с использованием методов абстрактного класса
- 9. C# Получение класса из более чем одного абстрактного класса
- 10. js создания абстрактного класса
- 11. Вызов частных методов абстрактного класса
- 12. Использование методов абстрактного класса в классе, который его не расширяет.
- 13. Динамический абстрактный класс внутри абстрактного класса
- 14. Вызов не абстрактных методов из абстрактного класса
- 15. Создать абстрактный класс без абстрактного метода
- 16. Вызов c'tor производного класса из абстрактного базового класса
- 17. Абстрактный метод класса с другим типом возвращаемого в производном классе
- 18. Абстрактный подкласс абстрактного базового класса
- 19. Абстрактный базовый класс с использованием аргумента шаблона из производного класса
- 20. Usercontrol, полученный из абстрактного класса
- 21. Создание массива указателей объектов производного класса. C++. Абстрактный базовый класс
- 22. Общий класс помощников, вызванный из абстрактного класса
- 23. Базовая инициализация поля класса в производном классе
- 24. Python - переопределение атрибута класса в производном классе
- 25. Почему абстрактный класс должен реализовывать абстрактный метод абстрактного базового класса?
- 26. Как получить значение конструктора абстрактного класса в производном классе
- 27. возвращает объект производного класса через указатель его абстрактного базового класса
- 28. Переопределение декоратора абстрактного класса в унаследованной классе
- 29. Вызов методов из расширенных классов в массиве из абстрактного класса
- 30. В чем смысл абстрактного класса без абстрактных методов?
Зачем вам это нужно? Вся идея абстрактных методов заключается в том, что вы * имеете *, чтобы переопределить их. –
Скорее всего, вы хотите, чтобы виртуальные методы переопределяли в вашем производном классе – OzrenTkalcecKrznaric
Я создаю базовый класс для моей архитектуры проекта, и этот вопрос поражает меня, я знаю, что это невозможно, но я думаю, что есть какой-то трюк или что-то еще добиться этого. – Vishwajeet