Skip to main content

Полиморфизъм в C#

C# предоставя възможности за абстракция и гъвкаво управление на кода чрез абстрактни класове, интерфейси и полиморфизъм.

Абстрактни Класове

Абстрактният клас е клас, от който не могат да се създават директни инстанции. Той често съдържа абстрактни методи без имплементация, които трябва да бъдат определени в класовете наследници.

Особености на Абстрактните Класове:

  • Съдържат абстрактни методи без имплементация.
  • Могат да включват конкретни методи с имплементация.
  • Не могат да бъдат инстанцирани директно.
  • Наследниците трябва да предоставят имплементация на абстрактните методи.

Пример:

public abstract class Animal {
public abstract void MakeSound();

public void Breathe() {
Console.WriteLine("I'm breathing.");
}
}

Интерфейси

Интерфейсите определят набор от методи и свойства, които класовете трябва да имплементират.

Основи на Интерфейсите:

  • Интерфейсите могат да съдържат само декларации на методи и свойства.
  • От C# 8.0, интерфейсите могат да съдържат default имплементации на методи.
  • Не съдържат полета или конструктори.

Пример:

public interface IFlyable {
void Fly();

void Glide() {
Console.WriteLine("Gliding in the air.");
}
}

Полиморфизъм

Полиморфизмът позволява обектите да се третират като инстанции на техния базов клас или като инстанции на интерфейси, които имплементират.

Основи на Полиморфизма:

  • Различни класове могат да имплементират един и същ интерфейс.
  • Обектите могат да бъдат реферирани чрез референция на базов клас или интерфейс.
  • Позволява гъвкавост и повторна употреба на код.

Пример:

public class Bird : IFlyable {
public void Fly() {
Console.WriteLine("Bird is flying.");
}
}

IFlyable myBird = new Bird();
myBird.Fly(); // Executes the Fly() method of Bird, even though the reference type is IFlyable.

Интересни Факти и Съвети

  • Абстрактните класове и интерфейсите в C# предоставят рамка за

създаване на хиерархични и модуларни архитектури.

  • C# поддържа множествено наследяване на интерфейси, но единично наследяване на класове.
  • Полиморфизмът улеснява добавянето на нови функционалности без да се нарушава съществуващата функционалност.