Dataczwartek, 13 sierpnia 2026 Czas17:53:33
← Programowanie konsolowe (C#)

Lekcja 7. Metody i przeciążanie

Średni

Po co się tego uczymy?

Bez metod cały program musiałby być zapisany jako jeden ciąg instrukcji w Main() — nieczytelny i niemożliwy do ponownego wykorzystania. Metody to pierwszy krok w stronę dzielenia dużego problemu na mniejsze, zarządzalne fragmenty — dokładnie tak, jak zaczniesz projektować klasy w dalszej części tego działu (Lekcja 10 i kolejne).

Teoria

Metoda (funkcja) to nazwany, samodzielny fragment kodu, który możesz wywołać wielokrotnie z różnymi danymi, zamiast powtarzać ten sam kod w wielu miejscach. To jeden z najważniejszych sposobów organizowania kodu w każdym programie, niezależnie od jego rozmiaru.

Składnia metody w C#:
typZwracany NazwaMetody(typ parametr1, typ parametr2) { ... return wartość; }

Metody bez parametrów, bez zwracanej wartości (void oznacza "nic nie zwraca"):
static void Przywitaj() { Console.WriteLine("Cześć!"); }

Metody z parametrami, bez zwracanej wartości:
static void PrzywitajImieniem(string imie) { Console.WriteLine("Cześć, " + imie); }

Metody z wartością zwracaną (typ zwracany zamiast void, i słowo kluczowe return):
static int Dodaj(int a, int b) { return a + b; }

Przeciążanie metod (overloading) — możesz mieć KILKA metod o tej samej nazwie, różniących się liczbą lub typem parametrów. C# sam wybierze właściwą wersję na podstawie tego, jakich argumentów użyjesz przy wywołaniu:
int Dodaj(int a, int b) i double Dodaj(double a, double b) mogą współistnieć w tym samym programie.

Przeciążanie jest wskazane, gdy operacja logicznie robi "to samo", tylko dla różnych typów danych — nadużywanie go dla operacji, które robią RÓŻNE rzeczy, tylko myli czytelnika kodu.

Przykład z życia

Metoda Dodaj(a, b) działa jak przepis kulinarny zapisany raz na kartce — możesz go użyć wielokrotnie, za każdym razem z innymi składnikami (parametrami), bez przepisywania całej receptury od nowa.

Kod (C#)

using System;

class Program
{
    static void Main()
    {
        Przywitaj();
        PrzywitajImieniem("Kasia");

        int suma = Dodaj(3, 5);
        Console.WriteLine("Suma: " + suma);

        double sumaZDziesietnymi = Dodaj(2.5, 3.1); // wywołuje przeciążoną wersję dla double
        Console.WriteLine("Suma z częścią dziesiętną: " + sumaZDziesietnymi);
    }

    static void Przywitaj()
    {
        Console.WriteLine("Witaj w programie!");
    }

    static void PrzywitajImieniem(string imie)
    {
        Console.WriteLine("Cześć, " + imie + "!");
    }

    static int Dodaj(int a, int b)
    {
        return a + b;
    }

    static double Dodaj(double a, double b) // przeciążenie - ta sama nazwa, inne typy
    {
        return a + b;
    }
}

Komentarz i wyjaśnienie kodu

Zwróć uwagę, że w programie są DWIE metody o nazwie Dodaj — C# rozróżnia je po TYPACH parametrów (int, int vs double, double), nie po nazwie. Wywołanie Dodaj(2.5, 3.1) automatycznie "trafia" do wersji dla double, bo argumenty mają część dziesiętną. Słowo static oznacza, że metoda należy do całej klasy Program, a nie do konkretnego obiektu — więcej o różnicy dowiesz się w Lekcji 10.

Ćwiczenie samodzielne

Napisz metodę Kwadrat(int liczba) zwracającą kwadrat podanej liczby, i wywołaj ją dla kilku różnych wartości.

Plac zabaw — wypróbuj online

Poniższy kod wykonuje się od razu w Twojej przeglądarce — nic nie trzeba instalować. Zmień kod i kliknij „Uruchom”.

CSHARP

Zadania do pracy własnej

  1. Napisz metodę CzyPelnoletni(int wiek) zwracającą wartość typu bool.

  2. Napisz metodę ObliczCeneKoncowa(double cena, double rabatProcent) zwracającą cenę po odjęciu rabatu procentowego.

  3. Napisz dwie przeciążone metody Maksimum — jedną przyjmującą dwie liczby całkowite, drugą przyjmującą tablicę liczb całkowitych dowolnej długości — obie zwracające największą wartość. Wywołaj obie wersje i porównaj wyniki.

Typowe błędy

Częsty błąd to zapomnienie return w metodzie, która ma zwracać wartość (typ inny niż void) — kompilator zgłosi wtedy błąd "not all code paths return a value". Drugi błąd: próba przeciążenia metod różniących się TYLKO typem zwracanym (bez zmiany parametrów) — C# tego nie dopuszcza, bo przy wywołaniu nie dałoby się jednoznacznie rozstrzygnąć, której wersji użyć. Trzeci: nadmierne przeciążanie metod, które w rzeczywistości robią zupełnie różne rzeczy — utrudnia to zrozumienie kodu innym programistom.

Nawiązanie do egzaminu zawodowego

To realizacja efektu INF.04.4.2 z podstawy programowej: "przestrzega zasad programowania" — konkretnie kryterium dotyczące dzielenia programu na funkcje/metody, fundamentalnej techniki organizacji kodu wymaganej w całym dziale programowania obiektowego.