1. Понятие позднего и раннего связывания. Ключевые слова virtual, override


В функции main() выполнить следующие действия


Download 0.51 Mb.
bet5/17
Sana01.09.2023
Hajmi0.51 Mb.
#1672075
1   2   3   4   5   6   7   8   9   ...   17
Bog'liq
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:
1   2   3   4   5   6   7   8   9   ...   17




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling