Mamy możliwość stworzenia metody, która będzie posiadać parametry opcjonalne.
Zobaczmy przykład:

public static void SumujCzas(int LiczbaGodzin = 0, int LiczbaMinut = 0) {        
    }

Gdy decydujemy się na stworzenie metody z parametrami opcjonalnymi należy pamiętać o tym aby każdemu z parametrów nadać wartość początkową, w przeciwnym wypadku zobaczymy następujący błąd:

Rys. Błąd zgłoszony przez kompilator.

Poprawmy zatem naszą metodę:

    public static void SumujCzas(int LiczbaGodzin = 0, int LiczbaMinut = 0) {        
    }

Gdy będziemy chcieć wywołać procedurę Visual Studio wyświetli nam parametry opcjonalne zobaczmy:

Rys. Visual Studio podpowiada wartości dla parametrów opcjonalnych.

Dodajmy funkcjonalność do metody SumujCzas:

public static void SumujCzas(int LiczbaGodzin = 0, int LiczbaMinut = 0) {        
        if (LiczbaGodzin > 1 || LiczbaMinut >= 60) {
            int DodatkoweGodziny =(int) LiczbaMinut / 60;
            int DodatkoweMinuty = LiczbaMinut % 60;
            int Wynik = (LiczbaGodzin + DodatkoweGodziny) * 60 + DodatkoweMinuty;
            Console.WriteLine("Liczba godzin wynosi {0}, minut: {1}", LiczbaGodzin + DodatkoweGodziny, DodatkoweMinuty);
            Console.WriteLine("A jest to minut {0}", Wynik);
        }else{
        Console.WriteLine("Liczba godzin wynosi {0}, minut: {1}", LiczbaGodzin, LiczbaMinut);
        Console.WriteLine("A jest to minut:  {0}", LiczbaMinut+ LiczbaGodzin*60);
    }

Procedura SumujCzas ma za zadanie wyświetlanie ile godzin i minut mają po dodaniu parametry tej metody. Przykładowo:
SumujCzas(1,90)- do jednej godziny dodajemy 90 minut co nam daje 2 godziny i 30 minut. A jest to 150 minut.
SumujCzas(2,60)- da nam 3 godziny i 0 minut. A łącznie jest to 180 minut.
Zobaczmy cały kod programu z przykładowym wywołaniem metody:

class Program {
    static void Main() {
        SumujCzas(4,2);
        Console.ReadLine();
    }
    public static void SumujCzas(int LiczbaGodzin = 0, int LiczbaMinut = 0) {        
        if (LiczbaGodzin > 1 || LiczbaMinut >= 60) {
            int DodatkoweGodziny =(int) LiczbaMinut / 60;
            int DodatkoweMinuty = LiczbaMinut % 60;
            int Wynik = (LiczbaGodzin + DodatkoweGodziny) * 60 + DodatkoweMinuty;
            Console.WriteLine("Liczba godzin wynosi {0}, minut: {1}", LiczbaGodzin + DodatkoweGodziny, DodatkoweMinuty);
            Console.WriteLine("A jest to minut {0}", Wynik);
        }else{
        Console.WriteLine("Liczba godzin wynosi {0}, minut: {1}", LiczbaGodzin, LiczbaMinut);
        Console.WriteLine("A jest to minut:  {0}", LiczbaMinut+ LiczbaGodzin*60);
    }

    }
}

Rezultat działania aplikacji:

Rys. Efekt działania metody SumujCzas z parametrami 4, 2.

Skoro mamy parametry opcjonalne to istnieje zatem możliwość wywołania funkcji tylko z jednym parametrem. Zobaczmy przykład:

class Program {
    static void Main() {
        SumujCzas(5);
        Console.ReadLine();
    }
    public static void SumujCzas(int LiczbaGodzin = 0, int LiczbaMinut = 0) {        
        if (LiczbaGodzin >1 || LiczbaMinut >= 60) {
            int DodatkoweGodziny =(int) LiczbaMinut / 60;
            int DodatkoweMinuty = LiczbaMinut % 60;
            int Wynik = (LiczbaGodzin + DodatkoweGodziny) * 60 + DodatkoweMinuty;
            Console.WriteLine("Liczba godzin wynosi {0}, minut: {1}", LiczbaGodzin + DodatkoweGodziny, DodatkoweMinuty);
            Console.WriteLine("A jest to minut {0}", Wynik);
        }else{
        Console.WriteLine("Liczba godzin wynosi {0}, minut: {1}", LiczbaGodzin, LiczbaMinut);
        Console.WriteLine("A jest to minut:  {0}", LiczbaMinut+ LiczbaGodzin*60);
    }

    }
}

Rezultat działania aplikacji:

Rys. Wywołanie funkcji z parametrem opcjonalnym

Funkcja wykonała się poprawnie, wyliczony został czas dla 5 godzin. Ale co w przypadku, gdy chcemy obliczyć czas tylko dla minut? Gdy wpiszemy jako parametr nazwę zmiennej, a po dwukropku jej wartość wtedy Visual Studio nie bierze pod uwagę kolejności, ponieważ „wie” jaką wartość ma przypisać do zmiennych. Najpierw odwróćmy wpisane wartości za pomocą imiennego podania parametrów:

    static void Main() {
        Program.SumujCzas(LiczbaMinut:2, LiczbaGodzin:4);
        Console.ReadLine();
    }

Reszta kodu jest bez zmian. Rezultat działania aplikacji:

Rys. Efekt działania metody SumujCzas z zastosowaniem imiennych parametrów.

Wynik na ekranie jest identyczny, ale dzięki imiennemu wywołaniu parametru możliwe było odwrócenie kolejności zmiennych. Wykorzystując możliwość imiennego wywołania parametrów oraz wartości domyślne, możemy wywołać metodę SumujCzas jedynie podając minuty. Zobaczmy wywołanie procedury:

    static void Main() {
        Program.SumujCzas(LiczbaMinut:90);
        Console.ReadLine();
    }

Reszta kodu jest bez zmian. Rezultat działania aplikacji:

Rys. Efekt działania metody SumujCzas

Aplikacja działa poprawnie. Podczas pisania aplikacji możemy wykorzystać parametry opcjonalne oraz skorzystać z imiennego wywoływania parametrów. Rozwiązuje nam to problem gdy chcemy aby możliwe było wywołanie procedury o takiej samej ilości parametrów oraz takim samym typie, jednak aby jej zachowanie było inne.

Podsumowanie:
Metoda może być statyczna lub instancyjna. W zależności od typu inaczej ją wywołujemy. Funkcja może zwrócić nam wartość określonego typu, którą możemy wykorzystać w dalszej części kodu, może ona przyjmować parametry. Zmienne te  następnie wykorzystujemy w jej ciele. Możemy stworzyć parametry opcjonalne. Dzięki imiennemu wywołaniu parametrów, możemy odwrócić ich kolejność. Na początku te informacje mogą się wydawać skomplikowane i zagmatwane. Ale z coraz większym doświadczeniem w programowaniu wszystko staje się bardziej zrozumiałe. Polecam wrócić do tego wpisu za jakiś czas i go sobie przypomnieć.