7 Язык С# (интерфейсы).ppt
- Количество слайдов: 15
Интерфейсы
Пример объявления интерфейса public interface IDrawing { void Draw(); }
Реализация метода интерфейса class Shape: IDrawing { public Shape(double p 1, double p 2) { x = p 1; y = p 2; } public Shape() : this(0, 0) { } public void Draw() { Console. Write("[{0}, {1}]", x, y); } protected double x; protected double y; }
Правила использования интерфейсов 1. Интерфейсы не могут иметь базовый класс (включая System. Object). 2. Могут содержать только прототипы функций, свойств, событий. 3. Не могут иметь конструкторы. 4. Элементы интерфейса не могут иметь спецификаторов доступа. 5. Не могут создаваться экземпляры интерфейсов. 6. Интерфейс бессмыслен, если не предполагается реализация его функций в классе или в структуре. 7. Если класс наследует некоторый интерфейс, то он (класс) обязан переопределить все его функции. 8. Можно строить иерархию интерфейсов. 9. Рекомендуется начинать имя интерфейса с буквы I.
Присваивание объектов static void Main(string[] args) { Circle c 1 = new Circle(1, 1, 1); Circle c 2 = new Circle(2, 2, 2); c 1. Draw(); c 2. Draw();
Присваивание объектов static void Main(string[] args) { Circle c 1 = new Circle(1, 1, 1); Circle c 2 = new Circle(2, 2, 2); c 1. Draw(); c 2. Draw(); c 1 = c 2; c 1. Draw();
Присваивание объектов static void Main(string[] args) { Circle c 1 = new Circle(1, 1, 1); Circle c 2 = new Circle(2, 2, 2); c 1. Draw(); c 2. Draw(); c 1 = c 2; c 1. Draw(); c 2. R = 3; c 1. Draw(); }
Интерфейс ICloneable Определение: public interface ICloneable { object Clone(); }
Класс object Методы класса object: Equals Возвращает true, если сравниваемые объекты указывают на одну и ту же область памяти; false – если на разные. Get. Hash. Code Возвращает целое значение, идентифицирующее объект в памяти. Get. Type Возвращает объект System. Type, полностью описывающий данный элемент. To. String Возвращает абсолютное имя соответствующего типа в его строковом представлении. Finalize Защищенный метод. Вызывается, если он в переопределен, средой выполнения. NET, когда объект удаляется из динамической памяти. Memberwise. Clone Защищенный метод. Возвращает новый объект, являющийся «почленной» копией данного объекта.
Использование ICloneable class Circle : Shape, ICloneable { … public object Clone() { return this. Memberwise. Clone(); } … }
Использование ICloneable class Circle : Shape, ICloneable { … public object Clone() { Circle c(*this); // Необходимые манипуляции с объектом с return c; } … }
Использование ICloneable static void Main(string[] args) { Circle c 1 = new Circle(1, 1, 1); Circle c 2 = new Circle(2, 2, 2); c 1. Draw(); c 2. Draw(); c 1 = (Circle)c 2. Clone(); c 1. Draw(); c 2. R = 3; c 1. Draw(); }
Соотношение между интерфейсами и абстрактными базовыми классами 1. В отличие от АБК, интерфейсы – это чистый протокол. 2. Интерфейсы позволяют избежать проблем, связанных с множественным наследованием. 3. Интерфейсы обеспечивают альтернативный способ реализации полиморфного поведения – с их помощью могут демонстрировать идентичное поведение типы, не связанные классическим наследованием.
Полиморфизм в действии static void Main(string[] args) { Shape[] mas = new Shape[2]; mas[0] = new Circle(0, 0, 1); mas[1] = new Rectangle(0, 0, 2, 1); for (int i = 0; i < mas. Length; i++) mas[i]. Draw(); }
Полиморфизм, основанный на интерфейсах class House: IDrawing { // Реализация класса House } static void Main(string[] args) { IDrawing[] mas = {new Circle(0, 0, 1), new Rectangle(0, 0, 2, 1), new House(5)} for (int i = 0; i < mas. Length; i++) mas[i]. Draw(); }
7 Язык С# (интерфейсы).ppt