Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
програмирование.docx
Скачиваний:
5
Добавлен:
24.09.2019
Размер:
34.98 Кб
Скачать
  1. Что понимается под термином «полиморфизм» и в чем его основной принцип?

Полиморфизм позволяет определять в наследуемом классе методы, которые будут общими для всех наследующих классов, при этом наследующий класс может определять специфическую реализацию некоторых или всех этих методов. Главный принцип полиморфизма: «один интерфейс, несколько методов». Благодаря ему, можно

пользоваться методами, не обладая точными знаниями о типе объектов

  1. Какие механизмы используются в языке c# для реализации концепции полиморфизма?

Основным инструментом для реализации принципа полиморфизма является использование виртуальных методы и абстрактных классов.

В более общем смысле, концепцией полиморфизма является идея "один интерфейс, множество методов". Это означает, что можно создать общий интерфейс для группы близких по смыслу действий.

  1. Что понимается под термином «виртуальный метод» и переопределенный метод?

Виртуальный метод отличается тем, что он может быть переопределен в одном или нескольких производных классах. Следовательно, у каждого производного класса может быть свой вариант виртуального метода.

При вызове определяется именно тот вариант виртуального метода, который следует вызывать, исходя из типа объекта, к которому происходит обращение по ссылке, причем это делается во время выполнения. Поэтому при ссылке на разные типы объектов выполняются разные варианты виртуального метода.

Если базовый класс содержит виртуальный метод и от него получены производные классы, то при обращении к разным типам объектов по ссылке на базовый класс выполняются разные варианты этого виртуального метода.

Метод объявляется как виртуальный в базовом классе с помощью ключевого слова virtual, указываемого перед его именем. Когда же виртуальный метод переопределяется в производном классе, то для этого используется модификатор override. А сам процесс повторного определения виртуального метода в производном классе называется переопределением метода. При переопределении имя, возвращаемый тип и сигнатура переопределяющего метода должны быть точно такими же, как и у того виртуального метода, который переопределяется. Кроме того, виртуальный метод не может быть объявлен как static или abstract.

  1. Какие условия определяют выбор версии виртуального метода?

При определении виртуального метода в составе наследуемого класса

перед типом возвращаемого значения указывается ключевое слово virtual,

а при переопределении виртуального метода в наследующем классе

используется модификатор override. Виртуальный метод не может быть

определен с модификатором static или abstract.

  1. Что означает термин «переопределенный метод»?

процесс повторного определения виртуального метода в производном классе называется переопределением метода.

Переопределение метода положено в основу концепции динамического выбора вызываемого метода - выбора вызываемого переопределенного метода осуществляется во время выполнения программы, а не во время компиляции.

  1. Приведите синтаксис виртуального метода в общем виде. Проиллюстрируйте его фрагментом программы на языке C#.

Синтаксис:

virtual тип имя (список_параметров){тело_метода};

Пример:

public virtual string FontInfo(Font obj)

{

string s = "Информация о шрифте: " + "Тип шрифта: " + typeFont + "\nРазмер шрифта: " + fontSize + "\n";

return s;

}

}

  1. Что понимается под термином «абстрактный класс» и в чем его особенность?

В абстрактном классе определяются лишь общие предназначения методов, которые должны быть реализованы в наследующих классах, но сам по себе этот класс не реализует один, или несколько подобных методов,

называемых абстрактными (для них определены только некоторые характеристики, такие как тип возвращаемого значения, имя и список

параметров).

  1. Возможно ли создание иерархии классов посредством абстрактного класса?

Абстрактный класс предназначен только для создания иерархии классов,

  1. Возможно ли создание объектов абстрактного класса?

нельзя создать объект абстрактного класса.

  1. Приведите синтаксис абстрактного класса в общем виде. Проиллюстрируйте его фрагментом программы на языке C#.

Пример:

abstract class Animal

{

public string Name;

protected int Weight;

private int Type;

abstract void Feed();

public int Animal(int W, int T, string N)

{

Weight=W;

Type=T;

Name=N;

}

public int GetWeight(){return Weight;}

}

class Predator:Animal

{

private int Speed;

override void Feed(int Food){

Weight += Food;}

}