В соответствии с другим синтаксисом и где он может быть использован, оба они кажутся очень тесно связанными. Каковы основные отличия?Аннотация и виртуальный же смысл?
ответ
abstract означает, что производный класс вынужден реализовать его, а с виртуальным это не так (он может, но не требуется). Это связано с тем, что абстрактный метод не имеет связанного тела, пока действует виртуальный метод.
Определяя элемент как абстрактный, вы определяете вид заполнителя, не предоставляя никакой реализации по умолчанию. Любой клиентский код, который взаимодействует с базовым классом, все равно может ссылаться на абстрактного члена-заполнителя, будучи уверенным в том, что конкретный класс экземпляра должен обеспечить конкретную реализацию.
Определяя элемент как виртуальный, вы позволяете производным классам предоставлять реализацию, которая будет переопределять функцию базового класса. Разница в том, что если производный класс не предоставляет свою собственную реализацию, будет использоваться один из базового класса.
Рассмотрим следующие C# примеры классов:
abstract class TaskBase {
public abstract void RunTask();
}
class RoadNetwork {
public string GetCorrectSideToDriveOn() { return "left"; }
}
Конструкция TaskBase
класса заставляет производный класс, чтобы обеспечить свою собственную реализацию RunTask()
, потому что код не будет компилироваться без него. Дизайнер действительно говорит: «Задачи должны быть запущены, но вы должны обеспечить реализацию, потому что нет значимого дефолта».
Конструкция RoadNetwork
класс работает по-разному: кто-то, кто реализует RoadNetwork
будет автоматически использовать правильную сторону дороги, чтобы ехать дальше, если они специально не решили ехать на изнаночной стороне;)
- 1. Аннотация или виртуальный метод?
- 2. C++ Аннотация шаблонный тип, сохранить T (виртуальный)
- 3. Аннотация CharBuffer и пакет-частный HeapCharBuffer: в чем смысл?
- 4. Аннотация класс, конструктор копирования
- 5. Весенняя аннотация и жизненный цикл.
- 6. JPA 2.0 аннотация поля и аннотация метода
- 7. ThreadLocal и @Aspect аннотация
- 8. Аннотация и конечный класс, определенные на том же классе Scala
- 9. Аннотация класс и чистый метод C++
- 10. Hibernate Аннотация (Pyramid структура - та же таблица)
- 11. Apache обратный прокси и виртуальный хост в то же время
- 12. Действие ASP.NET MVC и виртуальный каталог с тем же путем
- 13. виртуальный каталог с тем же именем, что и действие контроллера
- 14. аннотация и регулярное выражение
- 15. JPA аннотация и ConstraintViolationException
- 16. @ Модельная аннотация и MVC
- 17. интерфейс, аннотация и классы
- 18. Аннотация класс и инструменты
- 19. Scala и @Inject аннотация
- 20. Аннотация URL и маршрутизации
- 21. @ Важная аннотация и NullPointerException
- 22. Symfony2: login_check и аннотация
- 23. EJB3 @RunAs аннотация и безопасность
- 24. Виртуальный виртуальный адрес
- 25. Виртуальный виртуальный компьютер
- 26. Виртуальный повторитель и транспортир
- 27. «Виртуальный» и файлы заголовков
- 28. виртуальный каталог и Слэш
- 29. Виртуальный класс и наследование
- 30. Виртуальный размер и GlobalMemoryStatusEx
Вы могли бы пойти в что абстрактный метод является (особым видом) виртуальным методом. – GolezTrol