Содержание
- 2. Рассматриваемые вопросы Наследование классов Преобразование и приведение ссылочных типов Перекрытие элементов класса и полиморфизм Иерархия типов
- 3. Концепция наследования в ООП Наследование (inheritance) позволяет описать новый класс (класс-потомок, дочерний класс, подкласс) на основе
- 4. Наследование классов в C# Классы в C# поддерживают наследование. При этом: Наследование от двух и более
- 5. Синтаксис наследования (на примере) public class Person { public string Name { get; set; } }
- 6. Наследование и конструкторы Конструкторы предка не переносятся в потомок, но доступны из него. B начале работы
- 7. Наследование и конструкторы public class Person { public string Name { get; set; } public Person()
- 8. Наследование и конструкторы public class Employee : Person { public int Salary { get; set; }
- 9. Наследование и конструкторы var x = new Employee(); // Employee() вызывает Person() // Name="Unknown", Salary =
- 10. Совместимость при присваивании В C# действует классическое правило: объекту предка можно присвоить объект потомка, но не
- 11. Совместимость при присваивании class A { public int X; } class B : A { public
- 12. Ссылочные преобразования Ссылочные преобразования – преобразования типов, выполняемые для объектов. Любой объект может быть неявно приведён
- 13. Пример ссылочных преобразований // объявим ещё два класса, // кроме Person и Employee public class Student
- 14. Пример ссылочных преобразований Person p; Employee e; Student s; p = new Employee(); // неявное приведение
- 15. Операция as – безопасное приведение Obj as T Условие успешной компиляции: для Obj существует явное или
- 16. Операция as – пример Person p; if (DateTime.Now.Second % 2 == 0) // случайно создаём p
- 17. Операция is – проверка типа Obj is T Операция is возвращает true, если Obj не равен
- 18. Операция is – пример // код случайной инициализации объекта p // смотрите в предыдущем примере Employee
- 19. Операция is с приведением типов При выполнении операции is можно указать не только тип, но и
- 20. Перекрытие элементов Потомок может объявить элемент с тем же именем, что и элемент в предке –
- 21. Пример перекрытия методов public class Person { public string Name { get; set; } public void
- 22. Пример перекрытия методов public class Employee : Person { public int Salary { get; set; }
- 23. Вызов перекрытых методов По умолчанию при наличии перекрытия вызываемый метод определяется на этапе компиляции по объявленному
- 24. Полиморфный вызов При таком вызове нужный метод будет определятся на этапе выполнения кода по фактическому типу
- 25. Полиморфизм – пример public class Person { ... public virtual void Display() => Console.WriteLine(Name); } public
- 26. Полиморфизм – пример Person p; p = new Employee(); // так как Display() – виртуальный метод,
- 27. Полиморфизм – технические детали Указатель на объект Служебная информация Поля объекта Адрес метода #1 Адрес метода
- 28. Полиморфизм – определение Полиморфизм – особый способ перекрытия методов при наследовании, при котором код, работающий с
- 29. Полиморфный вызов: нюансы Можно организовывать полиморфные цепочки, используя override в потомках потомка и так далее. Для
- 30. Covariant return types (C# 9) public class Animal { public virtual Food GetFood() { . .
- 31. Наследование и полиморфизм Демонстрация кода 01: классы, связанные наследованием, без использования полиморфизма. Демонстрация кода 02: классы,
- 32. Наследование – модификаторы классов Модификатор sealed определяет запечатанный класс, от которого запрещено наследование. Модификатор abstract определяет
- 33. Абстрактные методы Для методов в абстрактных классах можно применить модификатор abstract. Он говорит о том, что
- 34. Пример абстрактного класса public abstract class Figure { public string Name { get; } protected Figure(string
- 35. Запечатанные методы Модификатор sealed может применятся к методам с модификатором override. Такой запечатанный метод не может
- 36. Иерархия типов платформы .NET В .NET все типы (кроме интерфейсов) связаны общим отношением наследования. У всех
- 37. Иерархия типов платформы .NET
- 38. Упаковка Напомним, что переменные типов значений хранятся в стеке, а объекты хранятся в динамической памяти. С
- 39. Упаковка int x = 1234; object o = x; // здесь выполняется boxing При упаковке в
- 40. Распаковка Упакованное значение можно поместить в переменную типа значения при помощи операции распаковки (unboxing). «Коварство» в
- 41. Упаковка и распаковка Стек «Куча» 1234 int x = 1234; object o = x; 1234 int
- 42. Методы класса System.Object Так как все типы наследуются от System.Object, то все значения в .NET обладают
- 43. Методы класса System.Object public virtual bool Equals(object obj) Этот метод определяет, равен ли текущий объект переданному
- 44. Правила переопределения Equals()
- 45. Методы класса System.Object public static bool Equals(object a, object b) Метод Equals() определяет, равны ли его
- 46. Методы класса System.Object protected virtual void Finalize() Метод Finalize() позволяет объекту освободить ресурсы и выполнить операции
- 47. Методы класса System.Object public virtual int GetHashCode() Метод играет роль хеш-функции. Пользовательские типы могут переопределять это
- 48. Методы класса System.Object public Type GetType() Метод GetType() возвращает объект класса System.Type, который содержит метаданные, связанные
- 49. Методы класса System.Object protected object MemberwiseClone() Метод выполняет создание неглубокой копии объекта. Метод создаёт новый объект
- 50. Методы класса System.Object public static bool ReferenceEquals(object a, object b) Статический метод ReferenceEquals() возвращает значение true,
- 51. Методы класса System.Object public virtual string ToString() Метод возвращает строковое представление объекта.
- 52. Класс System.Object – сводка методов public virtual bool Equals(object obj) public static bool Equals(object a, object
- 54. Скачать презентацию