Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ProgBasics_lec07_polymorphism

.pdf
Скачиваний:
8
Добавлен:
14.04.2015
Размер:
466.92 Кб
Скачать

class Program

{

static void Main()

{

Number n1 = new Number(); n1++;

n1++;

Number n2 = n1 + 5;

Console.WriteLine("n1 = {0}, n2 = {1}", n1, n2);

}

}

Полиморфизм подтипов

Виртуальный метод – такой метод, который может быть переопределён в классахнаследниках.

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

Это называется «поздним связыванием». Что же тогда такое – раннее связывание?

Зачем?

Позволяет обеспечить единообразное поведение с одним и тем же интерфейсом

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

class Number

{

public virtual Number Add(Number n1, Number n2)

{

return new Number();

}

}

public class Integer : Number

{

public override Number Add(Number n1, Number n2) { … }

}

public class ComplexNumber : Number

{

public override Number Add(Number n1, Number n2) { … }

}

usage

Number integer = new Integer(); Number a = new Integer(); Number b = new Integer(); ComplexNumber complNumber =

new ComplexNumber();

integer.Add(a, b);

Абстрактные классы

Нельзя создавать экземпляры

Может содержать абстрактные элементы

может, а не обязан!

Не могут быть помечены, как sealed

Представляют наиболее общую абстракцию

Абстрактные классы

abstract class Number

{

public virtual Number Add(Number n1, Number n2)

{

return new Number();

}

}

Абстрактные классы

abstract class Number

{

public abstract Number Add(Number n1, Number n2);

}

sealed

Позволяет:

создавать бесплодные (запечатанные) классы

запрещать переопределять методы, свойства, и т.д., в потомках

sealed class A

{

}

class B : A {

}

//будет ошибка компиляции

selaed

public class Integer : Number

{

public sealed override Number Add(Number n1, Number n2)

{ … }

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]