Виртуальные методы позволяют
Виртуальные методы позволяютВиртуальный метод
=== Скачать файл ===
Полиморфизм часто называется третьим столпом объектно-ориентированного программирования после инкапсуляции и наследования. Полиморфизм — слово греческого происхождения, означающее 'многообразие форм' и имеющее несколько аспектов. Во время выполнения объекты производного класса могут обрабатываться как объекты базового класса в таких местах, как параметры метода и коллекции или массивы. Когда это происходит, объявленный тип объекта перестает соответствовать своему типу во время выполнения. Базовые классы могут определять и реализовывать виртуальные методы , а производные классы — переопределять их, т. Во время выполнения, когда клиент вызывает метод, CLR выполняет поиск типа объекта во время выполнения и вызывает перезапись виртуального метода. Таким образом, в исходном коде можно вызвать метод на базовом классе и привести версию производного класса метода, который необходимо выполнить. Виртуальные методы позволяют работать с группами связанных объектов универсальным способом. Представим, например, приложение, позволяющее пользователю создавать различные виды фигур на поверхности для рисования. Во время компиляции вы еще не знаете, какие именно виды фигур создаст пользователь. При этом приложению необходимо отслеживать все различные типы создаваемых фигур и обновлять их в ответ на движения мыши. Для решения этой проблемы можно использовать полиморфизм, выполнив два основных действия. Создать иерархию классов, в которой каждый отдельный класс фигур является производным из общего базового класса. Применить виртуальный метод для вызова соответствующего метода на любой производный класс через единый вызов в метод базового класса. Для начала создайте базовый класс с именем Shape и производные классы, например Rectangle , Circle и Triangle. Присвойте классу Shape виртуальный метод с именем Draw и переопределите его в каждом производном классе для рисования конкретной фигуры, которую этот класс представляет. Для обновления поверхности рисования используйте цикл foreach , чтобы выполнить итерацию списка и вызвать метод Draw на каждом объекте Shape в списке. Несмотря на то, что каждый объект в списке имеет объявленный тип Shape , вызывать будет тип во время выполнения переопределенная версия метода в каждом производном классе. В C каждый тип является полиморфным, так как все типы, включая пользовательские, наследуют Object. Если производный класс наследуется из базового, он получает все методы, поля, свойства и события базового класса. Разработчик производного класса может выбрать следующее:. Производный класс может переопределить член базового класса, только если последний будет объявлен виртуальным или абстрактным. Производный член должен использовать ключевое слово переопределить , указывающее, что метод предназначен для участия в виртуальном вызове. Примером является следующий код:. Поля не могут быть виртуальными. Виртуальными могут быть только методы, свойства, события и индексаторы. Когда производный класс переопределяет виртуальный член, он вызывается даже в то случае, если доступ к экземпляру этого класса осуществляется в качестве экземпляра базового класса. Виртуальные методы и свойства позволяют производным классам расширять базовый класс без необходимости использовать реализацию базового класса метода. Для получения дополнительной информации см. Управление версиями с помощью ключевых слов Override и New. Еще одну возможность определения метода или набора методов, реализация которых оставлена производным классам, дает интерфейс. Если вам нужно, чтобы производный член имел такое же имя, как и член в базовом классе, но вы не хотите, чтобы он участвовал в виртуальном вызове, используйте новое ключевое слово. Ключевое слово new вставляется перед типом возвращаемого значения замещаемого члена класса. Доступ к скрытым членам базового класса можно по-прежнему осуществлять из клиентского кода приведением экземпляра производного класса к экземпляру базового класса. Виртуальные члены остаются виртуальными на неограниченный срок независимо от количества классов, объявленных между виртуальным членом и классом, который объявил его изначально. Если класс А объявляет виртуальный член, класс В производится из класса А, а класс С — из класса В, то класс С наследует виртуальный член и получает возможность переопределить его независимо от того, объявляет ли класс В переопределение этого члена. Производный класс может остановить виртуальное наследование, объявив переопределение как запечатанное. Для этого в объявление члена класса необходимо вставить ключевое слово sealed перед ключевым словом override. В предыдущем примере метод DoWork более не является виртуальным ни для одного класса, произведенного из класса С. Он по-прежнему виртуален для экземпляров класса С, даже если они приводятся к типу В или типу А. Запечатанные методы можно заменить производными классами с помощью ключевого слова new , как показано в следующем примере. В этом случае, если DoWork вызывается на D с помощью переменной типа D, вызывается новый DoWork. Если переменная типа C, B или A используется для доступа к экземпляру D, вызов DoWork будет выполняться по правилам виртуального наследования и направлять эти вызовы на реализацию DoWork на классе C. Производный класс, который заменил или переопределил метод или свойство, может получить доступ к методу или свойству на базовом классе с помощью базового ключевого слова. Рекомендуется, чтобы виртуальные члены использовали base для вызова реализации базового класса этого члена в их собственной реализации. Разрешение поведения базового класса позволяет производному классу концентрироваться на реализации поведения, характерного для производного класса. Если реализация базового класса не вызывается, производный класс сопоставляет свое поведение с поведением базового класса по своему усмотрению. Использование ключевых слов Override и New. Руководство по программированию на C Руководство по программированию на C Наследование Абстрактные и запечатанные классы и члены классов Методы События Свойства Индексаторы Типы. Полиморфизм Руководство по программированию на C WriteLine 'Drawing a circle' ; base. WriteLine 'Drawing a rectangle' ; base. WriteLine 'Drawing a triangle' ; base. Add new Rectangle ; shapes. Add new Triangle ; shapes. WriteLine 'Press any key to exit. Обзор полиморфизма Виртуальные члены Если производный класс наследуется из базового, он получает все методы, поля, свойства и события базового класса. Разработчик производного класса может выбрать следующее: Примером является следующий код: Сокрытие членов базового класса новыми членами Если вам нужно, чтобы производный член имел такое же имя, как и член в базовом классе, но вы не хотите, чтобы он участвовал в виртуальном вызове, используйте новое ключевое слово. Защита виртуальных членов от переопределения производными классами Виртуальные члены остаются виртуальными на неограниченный срок независимо от количества классов, объявленных между виртуальным членом и классом, который объявил его изначально. Доступ к виртуальным членам базового класса из производных классов Производный класс, который заменил или переопределил метод или свойство, может получить доступ к методу или свойству на базовом классе с помощью базового ключевого слова. Примечание Рекомендуется, чтобы виртуальные члены использовали base для вызова реализации базового класса этого члена в их собственной реализации. Блог Конфиденциальность и файлы cookie Условия использования Обратная связь Impressum Товарные знаки.
Какая завтра погода в орехово зуево
Стоимость устного перевода час
Маз 643019 1420 020 характеристики