Similar presentations:
Наследование___C___Лекция_2_
1.
2.
позволяет создавать производные классы (классынаследники), взяв за основу все методы и элементы
базового класса (класса родителя).
Объекты производного класса свободно могут
использовать всё, что создано и отлажено в базовом
классе.
3.
При этом, мы можем в производный класс, дописатьнеобходимый код для усовершенствования программы:
добавить новые элементы, методы и т.д..
Базовый класс останется нетронутым.
4.
Класс, от которого произошло наследование, называетсябазовым или родительским (англ. base class).
Классы, которые произошли от базового, называются
потомками, наследниками или производными классами
(англ. derived class).
5.
Отабстрактного
класса
От простого
класса
От интерфейса
6.
Производный класс наследует от базового класса ВСЕ, чтоон имеет. Другое дело, что воспользоваться в
производном классе можно не всем наследством.
Например, объект класса наследника в принципе НЕ
может получить доступ к private данным — членам и
функциям — членам класса-родителя.
7.
Описать базовый классclass ClassParent
{
private int x;
protected double y;
public int getX { get { return x; } }
}
8.
Создать класс и унаследоваться от базовогоclass ClassChild : ClassParent
{
}
9.
Доступ к члену с модификатором protected возможенвнутри класса и из производных экземпляров класса.
10.
У родительскогокласса есть поле
y типа double с
модификатором
доступа
protected
11.
Дочерний классимеет доступ к
этому полю
12.
Но извне это поле недоступно13.
Доступ к членамбазового класса во
вложенном классе
можно получить
при помощи
ключевого слова
base.
14.
Изменимбазовый класс,
добавим метод
15.
Переопределимего в
наследнике,
используя
ключевое слово
new
16.
Теперь при вызовеметода
nothingMethod у
объекта класса
ClassChild будет
вызываться метод
не родительского
класса, а дочернего
17.
Ключевое слово virtual используется для измененияобъявлений методов, свойств, индексаторов и событий и
разрешения их переопределения в производном классе.
18.
Модификатор virtual нельзя использовать смодификаторами static, abstract, private или override. В
следующем примере показано виртуальное свойство.
19.
В родительскомклассе создаем
метод с
модификатором
vitrual
20.
А в дочернем классе переопределяем его, используямодификатор override
21.
22.
Особые методы, которые есть у каждого класса(создаются по умолчанию, даже если их не прописали).
Конструктор вызывается при создании объекта от класса
и служит инициализатором всех его полей
Деструктор вызывается при уничтожении объекта для
отчистки из памяти всех его полей.
23.
Если не прописать, создается по умолчанию только дляприсвоения полям значений по умолчанию.
Если написали конструктор, конструктор по умолчанию
уже не будет создан.
Если есть несколько конструкторов, хотя бы один должен
иметь доступ public.
24.
Ничего не возвращаетНазывается также как и класс
25.
Если не прописать, создается по умолчанию для отчисткиполей.
Имеется только один деструктор в классе (конструкторов
может быть много)
26.
Перед деструктором ставится значок ‘~’Имеет имя, такое же как класс
Не возвращает ничего
27.
Построение объектов базового класса всегдавыполняется до любого производного класса. Так,
конструктор базового класса выполняется перед
конструктором производного класса. Если базовый класс
имеет несколько конструкторов, производный класс
может выбрать вызываемый конструктор.
28.
Дополнимбазовый класс
двумя
конструкторами,
один ничего не
принимает,
другой
принимает 2
параметра
29.
Теперь укажем, что в наследнике, перед вызов егоконструктора, вызывался конструктор родителя с двумя
параметрами
30.
<мод. доступа> class <имя кл.> : <род. кл.>{
<мод. доступа> <имя кл.>(<параметр.>) :
base(<параметр.>)
{
//код
}
}
31.
При применении к классу, модификатор sealed запрещаетдругим классам наследовать от этого класса.
*Если вы его применяете, то у вас большие проблемы с
архитектурой проекта!
32.
Если к нашемуродителю
применить
этот
модификатор,
то его члены
перестанут
быть доступны
наследнику
33.
Ключевое слово abstract позволяет создавать классы иметоды классов, которые являются неполными и должны
быть реализованы в производном классе.
34.
Создавать объекты от абстрактного классанельзя. Назначение абстрактного класса заключается в
предоставлении общего определения для базового
класса, которое могут совместно использовать несколько
производных классов.
35.
36.
Интерфейс является ссылочным типом, который состоиттолько из абстрактных членов.
Когда класс реализует интерфейс, он должен
предоставить реализацию для всех членов интерфейса.
В классе может быть реализовано несколько интерфейсов
37.
Интерфейсобъявляется
через ключевое
слова interface.
Все методы
интерфейса
публичные!
38.
Интерфейсне может
содержать
полей!
39.
Но можетсодержать
свойства
40.
Если мы просто унаследуемся от интерфейса, неопределив ни одного метода, то получим ошибку
41.
Даже определив несколько методов интерфейса, но невсе, все равно будет ошибка
42.
Толькоопределив все
методы и
свойства,
ошибки не
будет
43.
Все методы,наследуемые
от интерфейса,
должны иметь
публичный
доступ
44.
Если потомок может наследоваться только от одногообычного или абстрактного класса, то в случае с
интерфейсами, он может наследоваться сразу же от
нескольких интерфейсов.
Но тут может возникнуть проблемка…
45.
46.
Если в интерфейсах присутствуют методы с одинаковыминазваниями, как понять метод какого из интерфейсов был
реализован в классе-наследнике?
47.
возможнуюнеоднозначность в
именах членов
можно разрешить
при помощи
полного
квалификатора
имени свойства или
метода.
48.
Оператор as используется для выполнения определенныхпреобразований типов между совместимыми
ссылочными типами или тип, допускающий значение
NULL.
Оператор is проверяет совместимость объекта с заданным
типом.
49.
С помощьюоператора is
убеждаемся, что наш
объект относится к
нужному интерфейсу,
а потом приводим его
к этому интерфейсу
для вызова нужного
метода
50.
Оператор as подобен оператору приведения. Однакоесли преобразование невозможно,
то as возвращает null вместо вызова исключения.
Если предоставленное выражение отлично от NULL и
предоставленный объект может быть приведен к
предоставленному типу не вызывая исключение,
выражение is принимает значение true.
51.
Создадим простой классбез содержимого
Теперь создадим объект от
этого класса и посмотрим
что в нем есть
52.
В нем оказалось 4 метода, хотя мы ничего непрописывали. Откуда они?
В унифицированной системе типов C# все типы,
предопределенные и пользовательские, наследуют
непосредственно или косвенно от Object.
53.
Всеобщий базовый тип. Обязательная составляющаялюбого типа в .NET. Функциональные характеристики
типа System.Object приводятся в таблице.
54.
EqualsGetHashCode
Обеспечивает сравнение объектов
Обеспечивает реализацию алгоритма
хэширования для значений объектов
Для любого объекта создает объект типа
GetType
Type, содержащий информацию о структуре
типа данного объекта
ReferenceEquals Проверка эквивалентности ссылок.
Статический
Возвращает объект типа String с описанием
ToString
данного объекта