Опубликован: 25.03.2010 | Доступ: свободный | Студентов: 1447 / 158 | Оценка: 4.31 / 4.00 | Длительность: 25:42:00
Лекция 9:

Наследование в C#

Базовые и производные классы

Классификация в науке является мощным приемом борьбы со сложностью. Она позволяет навести порядок в многообразии объектов и сделать его обозримым. Вот так, например, можно классифицировать собак


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

Наследование как явление на абстрактном уровне реализует концепцию связи " является, происходит ", а композиция - " включает, содержит, имеет ". Если класс находится в связи наследования, то говорят, что он наследует и называется производным классом, а класс более высокого уровня называется базовым. Классы, связанные наследованием, образуют цепочку наследования (или иерархию наследования). Любой класс, включенный в середину этой цепочки, является производным от класса, стоящего на ступеньку выше, и в свою очередь является базовым для класса, стоящего на ступеньку ниже в иерархии наследования. Производные классы еще называют дочерними, а базовые - родительскими.

При наследовании происходит слияние кодов базового и производного классов и все сервисы базового класса доступны в производном классе или даже в клиенте производного класса.


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

Одно из отличий производного класса, сцепленного механизмом наследования с базовым классом, от составного класса, содержащего в себе экземпляры других классов, состоит в том, что производный класс наследует public -сервисы своего базового класса в готовом виде. Составному же классу нужно самостоятельно позаботиться о создании сервисов, если это необходимо, для включенных в него экземпляров.

Классы, стоящие на верхнем уровне иерархии наследования считаются более абстрактыми по сравнению с нижестоящими классами. Возможно, что более абстрактные классы не имеют конкретной реализации, а если и имеют, то таких реализаций значительно меньше, чем реализаций более конкретных классов. Говорят, что производный класс специфицирует ( расширяет конкретизацию) базовый класс дополнительными свойствами и поведением.

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

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

Одиночное и множественное наследование

Различают простое (одиночное) и множественное наследование. Связь в виде простого наследования предполагает, что производный класс имеет только одного родителя (происходит только от одного базового класса). Множественное наследование подразумевает, что дочерний класс имеет больше, чем одного родителя. Простое наследование более распространено в объектно-ориентированном программировании.


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


Наследование обеспечивает возможность постепенного наращивания кода путем объявления класса, встраивающего в себя другой ранее разработанный класс. В языке C# могут наследоваться классы и интерфейсы. Классы C# допускают только одиночное наследование других классов, но множественное наследование интерфейсов. Интерфейсы могут наследовать другие интерфейсы, причем множественно. С наследованием связано множество специфических приемов работы с кодом, поддерживаемых языком C#.

Максим Филатов
Максим Филатов

Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет:

Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.

 

Как активировать код?