Ця сторінка пояснює, як інтерфейси розвивають ідеї абстрактних класів: дають контракт (набір методів), який можуть реалізувати різні класи. Нижче — приклади, таблиці тестування та порівняння.
IFigure
Інтерфейс IFigure визначає методи GetArea() та GetPerimeter(). Класи Triangle і Circle реалізують цей інтерфейс.
using System;
interface IFigure
{
double GetArea();
double GetPerimeter();
}
class Triangle : IFigure
{
public double A { get; }
public double B { get; }
public double C { get; }
public Triangle(double a, double b, double c)
{
A = a; B = b; C = c;
}
public double GetArea()
{
double p = GetPerimeter() / 2;
return Math.Sqrt(p * (p - A) * (p - B) * (p - C)); // Герон
}
public double GetPerimeter()
{
return A + B + C;
}
}
class Circle : IFigure
{
public double Radius { get; }
public Circle(double radius) => Radius = radius;
public double GetArea() => Math.PI * Radius * Radius;
public double GetPerimeter() => 2 * Math.PI * Radius;
}
class Program
{
static void Main()
{
IFigure f1 = new Triangle(3, 4, 5);
IFigure f2 = new Circle(5);
Console.WriteLine($"Трикутник: площа = {f1.GetArea():F3}, периметр = {f1.GetPerimeter():F3}");
Console.WriteLine($"Коло: площа = {f2.GetArea():F3}, довжина = {f2.GetPerimeter():F3}");
}
}
Вхідні дані та очікувані результати:
| Фігура | Параметри | Площа | Довжина границі |
|---|---|---|---|
| Triangle | 3, 4, 5 | 6.000 | 12.000 |
| Circle | R = 5 | ≈ 78.540 | ≈ 31.416 |
| Критерій | Абстрактний клас | Інтерфейс |
|---|---|---|
| Ключове слово | abstract class |
interface |
| Наявність полів | Може мати поля (стан) | Не може мати полів (до C# 8.0) |
| Реалізація методів | Може містити як реалізовані, так і абстрактні методи | Методи без реалізації (за замовчуванням); з C# 8.0 можливі реалізації за замовчуванням |
| Успадкування / Реалізація | Клас може успадкувати лише один клас | Клас може реалізовувати багато інтерфейсів |
| Модифікатори доступу | Може мати різні модифікатори доступу | Методи інтерфейсу публічні за замовчуванням |
| Призначення | Визначає спільну поведінку та/або стан | Визначає лише контракт (поведінку) |