Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы ООП не все.docx
Скачиваний:
7
Добавлен:
22.09.2019
Размер:
224.93 Кб
Скачать

Вызов базовых версий функций

В С# предусмотрен специальный синтаксис вызова базовых версий метода из производного класса: base.<MethodName> ( ). Например, если необходимо, чтобы метод производного класса возвращал значение в 5 раз большее чем, метод базового класса, можно воспользоваться следующим синтаксисом:

class class1

{

private int a=10;

public virtual int get _a()

{

return a;

}

}

class class2: class1

{

public override int get_a()

{

return base. get _a() * 5;

}

}

class Program

{

static void Main(string[] args)

{

class1 my_class1 = new class1();

class2 my_class2 = new class2();

Console.WriteLine(my_class1. get _a());

Console.WriteLine(my_class2. get _a());

Console.ReadLine();

}

}

Отметим, что синтаксис base.<MethodName> () можно использовать для вызов любого метода базового класса — вы не обязаны вызывать его только из переопреде­ленной версии того же метода.

Вопрос 10 Наследование. Динамическое связывание.

Вопрос 11 Абстрактные методы. Особенности применения. Синтаксический блок

абстрактные методы. - создаются с помощью модификатора abstract, они не содержат тела и не реализуются базовым классом. Производный класс должен его переопределить т.к. не может использовать версию предложенную в базовом классе.

Формат записи:

abstract тип.имя ( список_параметров )

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

Абстрактный метод автоматически явл. Виртуальным и совместное использование модификаторов virtual иabstract считается ошибкой.

абстрактные методы (методы, которые не реализованы в текущем классе, но должны быть реализованы в неабстрактных потомках). Абстра́ктный ме́тод (в Паскаль), чисто виртуальный метод (в C++), отложенный метод — в объектно-ориентированном программировании, метод класса, реализация для которого отсутствует. Класс, содержащий абстрактные методы, также принято называть абстрактным (там же и пример). Абстрактные методы зачастую путают с виртуальными. Абстрактный метод подлежит определению в классах-наследниках, поэтому его можно отнести к виртуальным, но не каждый виртуальный метод является абстрактным.

Абстрактный метод в c#

Абстрактный метод ничего не делает, но определяет параметры и возвращаемое значение.

abstract type method_name(params);//определение в родительском классе

override method_name(params){...};//определение в дочернем классе

Назначение абстрактных методов[1]:

  • описание абстракции, которая не в более конкретизированном виде не может быть реализована;

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

Вопрос 12 Абстрактные классы. Синтаксический блок. Особенности.

Язык С# позволяет объявлять абстрактными и классы и функции. Нельзя созда­вать экземпляры абстрактных классов, в то время как абстрактные функции не имеют реализации и должны быть переопределены в любом неабстрактном классе-наслед­нике. Очевидно, что абстрактные функции автоматически являются виртуальными (хотя вы не должны применять ключевое слово virtual, так как это приведет к син­таксической ошибке). Если любой класс содержит любую абстрактную функцию, этот класс сам является абстрактным и должен быть объявлен таковым.

// Создаем абстакный класс

abstract class UserInfo

{

protected string Name;

protected byte Age;

public UserInfo(string Name, byte Age)

{

this.Name = Name;

this.Age = Age;

}

// Абстрактный метод

public abstract string ui();

}

В данном примере создается абстрактный класс UserInfo в котором инкапсулируется абстрактный метод ui(), который, в свою очередь, переопределяется в классе UserFamily.

Следует отметить, что в абстрактные классы вполне допускается (и часто практикуется) включать конкретные методы, которые могут быть использованы в своем исходном виде в производном классе. А переопределению в производных классах подлежат только те методы, которые объявлены как abstract.

Для создания абстактного метода необходимо в заголовок метода добавить ключевое слово abstract. Абстрактые классы не могут иметь объектов т.к. его методы не имеют реализации.