1. Понятие позднего и раннего связывания. Ключевые слова virtual, override
В функции main() выполнить следующие действия
Download 0.51 Mb.
|
C#да ПОЛИМОРФИЗМ ва ИНТЕРФЕЙСЛАР
В функции main() выполнить следующие действия:
объявить ссылку на базовый класс Figure; создать экземпляры классов Rectangle и RectangleColor; продемонстрировать использование динамического полиморфизма для доступа к методам производных классов с помощью ссылки на класс Figure. Текст программы следующий: using System; using static System.Console; namespace ConsoleApp1 { // Класс Figure class Figure { // Скрытое поле класса protected string name; // Конструктор с 1 параметром public Figure(string name) { this.name = name; } // Метод Display() - виртуальный - с ключевим словом virtual virtual public void Display() { WriteLine("Figure.name = {0}", name); } } // Класс Rectangle - наследует (расширяет) возможности класса Figure class Rectangle : Figure { // Скрытые поля - координаты точек protected double x1, y1, x2, y2; // Конструктор с 5 параметрами public Rectangle(string name, double x1, double y1, double x2, double y2):base(name) // вызвать конструктор базового класса { this.x1 = x1; this.y1 = y1; this.x2 = x2; this.y2 = y2; } // Конструктор без параметров, вызывает конструктор с 5 параметрами public Rectangle() : this("Rectangle", 0, 0, 1, 1) { } // Метод Display() - переопределяет одноименний метод базового класса, // поэтому, для обеспечения полиморфизма, нужно указать // ключевое слово override. public override void Display() { base.Display(); // вызвать метод Display базового класса Write("Rectangle: x1 = {0:f2}, y1 = {1:f2}, ", x1, y2); WriteLine("x2 = {0:f2}, y2 = {1:f2}", x2, y2); } // Метод, возвращающий площадь прямоугольника public double Area() { return Math.Abs(x1 - x2) * Math.Abs(y1 - y2); } } // Класс RectangleColor - добавляет к прямокутнику цвет, // наследует возможности класса Rectangle class RectangleColor : Rectangle { // Скрытое поле класса protected int color = 0; // Конструктор с 6 параметрами, // вызывает конструктор базового класса Rectangle public RectangleColor(string name, double x1, double x2, double y1, double y2, int color) : base(name, x1, y1, x2, y2) { this.color = color; } // Конструктор без параметров, // вызывает конструктор с 6 параметрами public RectangleColor() : this("RectangleColor", 0, 0, 1, 1, 0) { } // Метод Display() - вызывает одоименный метод базового класса, // для обеспечения полиморфизма нужно указать override public override void Display() { base.Display(); WriteLine("RectangleColor.color = {0}", color); } // Метод вычисления площади public new double Area() { return base.Area(); // вызов метода Area() базового класса } } class Program { // Метод, демонстрирующий полиморфизм. // В метод передается ссылка на базовый класс Figure static void DemoPolymorphism(Figure refFg) { // Вызов метода Display() refFg.Display(); // Один интерфейс - разные реализации!!! } static void Main(string[] args) { // 1. Объявить ссылку на базовый класс Figure refFg; // 2. Создать экземпляры классов Figure, Rectangle, Rectangle Figure objFg = new Figure("Figure"); Rectangle objRect = new Rectangle("Rectangle", 1, 2, 5, -4); RectangleColor objRectCol = new RectangleColor("RectangleColor", 1, 8, -1, 3, 2); // 3. Демонстрация полиморфизма з помощью // использования ссылки на базовый клас // 3.1. Присвоить ссылке на базовый класс // значение ссылки на класс Figure refFg = objFg; refFg.Display(); // вызывается Figure.Display() // 3.2. Присвоить ссылке значение ссылки на Rectangle refFg = objRect; refFg.Display(); // Вызывается Rectangle.Display() // 3.3. Присвоить ссылке refFg значение objRectCol refFg = objRectCol; refFg.Display(); // Вызывается RectangleColor.Display() // 4. Демонстрация полиморфизма через передачу параметра в функцию // 4.1. Передача в DemoPolymorphism ссылки на экземпляр класса Rectangle refFg = objRect; Program.DemoPolymorphism(refFg); // вызов Rectangle.Display() // 4.2. Передача в DemoPolymorphism ссылки на экземпляр класса RectangleColor refFg = objRectCol; Program.DemoPolymorphism(refFg); // вызов RectangleColor.Display() } } } Download 0.51 Mb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling