Blog Dla Programistów C#/.NET

poniedziałek, 24 marca 2025

Cześć! Dzisiaj chciałbym Ci opowiedzieć o interfejsach w C#. Jest to jeden z kluczowych elementów języka, który pozwala nie tylko na pisanie bardziej elastycznego i czystego kodu, ale też ułatwia testowanie i rozszerzanie aplikacji. Bez interfejsów trudno wyobrazić sobie projekty działające w oparciu o wzorce projektowe i zasady SOLID.

Wprowadzenie do Interfejsów w C#/.NET: Wszystko, co Musisz Wiedzieć

Czym są interfejsy w C#?


W dużym skrócie, interfejs definiuje zbiór metod, właściwości i zdarzeń, które klasa lub struktura musi zaimplementować, jeśli deklaruje, że ten interfejs "obsługuje". Interfejs to taki "szablon" zachowania bez konkretnej implementacji.

Dlaczego warto używać interfejsów?
    • Zapewniają polimorfizm: różne klasy mogą implementować ten sam interfejs, a my możemy pracować z nimi w ujednolicony sposób.
    • Ułatwiają testowanie: w testach można w łatwy sposób podmieniać klasy na implementacje "mocków".
    • Wspomagają zasadę odwrócenia zależności (Dependency Inversion): zamiast polegać na konkretnej klasie, polegamy na interfejsie.


Prosty przykład interfejsu


Wyobraź sobie, że tworzymy aplikację, w której różne zwierzęta mogą wydawać odgłosy. Zdefiniujmy interfejs:

public interface IAnimal
{
void MakeSound();
}

    • IAnimal deklaruje jedną metodę MakeSound().
    • Każda klasa, która chce być traktowana jako "zwierzę", musi zaimplementować tę metodę.

Implementacja interfejsu

Teraz utwórzmy dwie klasy: Dog i Cat, które zaimplementują IAnimal.

public class Dog : IAnimal
{
public void MakeSound()
{
Console.WriteLine("Hau Hau!"); }
}

public class Cat : IAnimal
{
public void MakeSound()
{
Console.WriteLine("Miau Miau!");
}
}

W kodzie aplikacji możemy użyć takich obiektów w następujący sposób:

public class Program
{
public static void Main()
{
IAnimal dog = new Dog();
IAnimal cat = new Cat();

dog.MakeSound(); // Hau Hau! cat.MakeSound(); // Miau Miau!
}
}

Tutaj odwołujemy się do klasy przez interfejs IAnimal. Dzięki temu możemy traktować obiekty Dog i Cat jednakowo w kontekście wywoływania metody MakeSound().


Interfejsy w praktyce: polimorfizm i testowanie


1. Polimorfizm w akcji

    • Możesz stworzyć kolekcję typu List<IAnimal> i wrzucać tam obiekty różnych klas. Poniżej przykład:

var animals = new List<IAnimal>
{
new Dog(),
new Cat()
};

foreach (var animal in animals)
{
animal.MakeSound();
}

W pętli nie interesuje Cię, które konkretnie zwierzę dajesz do kolekcji – wystarczy, że każde ma zaimplementowaną metodę MakeSound().

2. Testowanie z użyciem interfejsów

    • Dzięki temu, że w kodzie odwołujesz się do IAnimal zamiast bezpośrednio do Dog czy Cat, możesz w testach podmienić rzeczywistą implementację na np. obiekt mocka (np. z biblioteki Moq).
    • To umożliwia pisanie testów jednostkowych bez faktycznego uruchamiania logiki konkretnej klasy.


Właściwości i zdarzenia w interfejsach


Interfejs nie musi zawierać tylko metod. Możemy zadeklarować również właściwości czy zdarzenia, które klasa implementująca interfejs musi zdefiniować.

public interface IVehicle
{
string Model { get; set; }
event Action OnStart;

void Drive();
}

Implementacja mogłaby wyglądać tak:

public class Car : IVehicle
{
public string Model { get; set; }
public event Action OnStart;

public Car(string model)
{
Model = model;
}

public void Drive()
{
OnStart?.Invoke();
Console.WriteLine($"{Model} is driving...");
}
}

Tu klasa Car musi mieć publiczną właściwość Model (z get/set) oraz zdarzenie OnStart. Gdy wywołamy Drive(), odpalone zostanie zdarzenie (jeśli ktoś się na nie zapisał).


Nowości: domyślne implementacje w interfejsach (C# 8+)


Od wersji C# 8 w interfejsach można definiować domyślne implementacje metod. Jest to przydatne np. do rozbudowy interfejsu o dodatkowe metody bez łamania istniejącego kodu.

public interface IAdvancedAnimal
{
void MakeSound();
// Domyślna implementacja void Move()
{
Console.WriteLine("I am moving.");
}
}

Klasy implementujące ten interfejs nie muszą przesłaniać metody Move(), jeśli wystarcza im ta domyślna. Jeśli jednak chcą zmienić zachowanie, mogą ją nadpisać jak w zwykłej klasie.


Podsumowanie


Interfejsy to jeden z fundamentów OOP w C#. Pozwalają uniezależnić się od konkretnych implementacji, ułatwiają testowanie i wspierają zasady SOLID. Warto więc nauczyć się z nich korzystać od samego początku przygody z platformą .NET.

Jeżeli chcesz pogłębić swoją wiedzę i nauczyć się nie tylko teoretycznych, ale też praktycznych aspektów tworzenia aplikacji w C#, serdecznie zapraszam Cię do mojego szkolenia online "Zostań Programistą .NET". Znajdziesz tam kompleksowy materiał – od podstaw języka, przez wzorce projektowe, po zaawansowane zagadnienia związane z tworzeniem profesjonalnych aplikacji.

Daj znać w komentarzu, czy korzystasz z interfejsów w swoich projektach i co sprawia Ci największą trudność.

To wszystkie na dzisiaj. Jeżeli taki artykuł Ci się spodobał, to koniecznie dołącz do mojej społeczności – darmowe zapisy, gdzie będziesz również miał dostęp do dodatkowych materiałów i przede wszystkim bonusów. Do zobaczenia w kolejnym artykule.

Szkolenie Zostań Programistą .NET
Szczegóły == Zostań Programistą .NET ==
Zapisy tylko do piątku do 22:00!
Autor artykułu:
Kazimierz Szpin
Kazimierz Szpin
CTO & Founder - FindSolution.pl
Programista C#/.NET. Specjalizuje się w Blazor, ASP.NET Core, ASP.NET MVC, ASP.NET Web API, WPF oraz Windows Forms.
Autor bloga ModestProgrammer.pl
Dodaj komentarz

Wyszukiwarka

Szkolenie Zostań Programistą .NET
Szczegóły == Zostań Programistą .NET ==
Zapisy tylko do piątku do 22:00!

Zostańmy w kontakcie!

Dołącz do mojej listy mailowej, aby otrzymywać ciekawe informacje ze świata programowania. Dodatkowo będziesz informowany o nowych artykułach na blogu, a także otrzymasz wyjątkowe rabaty na moje kursy i szkolenia.

    Nienawidzę spamu, dlatego będziesz otrzymywał tylko wartościowe maile. Możesz zrezygnować z subskrypcji w dowolnym momencie ✅

    © Copyright 2025 modestprogrammer.pl. Wszelkie prawa zastrzeżone. Regulamin. Polityka prywatności. Design by Kazimierz Szpin
    Serwis wykorzystuje pliki cookies. Korzystając ze strony wyrażasz zgodę na wykorzystywanie plików cookies. dowiedz się więcej.