Pojęcie metoda często stosowane jest zamieniane z pojęciem funkcja, oznaczają one to samo. Metody są bardzo przydane, dzięki mim możemy tworzyć daną funkcjonalność raz, a następnie używać jej w wielu miejscach w kodzie. Używanie metod sprawia, że konserwacja i zmiany w kodzie są prostsze.
Konstrukcja metody:

Modyfikator_dostępu typ_zwracany nazwa_metody (paramerty){
//Ciało metody
}

O modyfikatorach dostępu napiszę w innym wpisie.

Typ zwracany – jeżeli chcemy aby funkcja zwracała nam jakąś wartość, którą możemy potem wykorzystać, musimy określić jej typ. Następnie w ciele funkcji powinniśmy użyć polecenia return. Jeżeli nie chcemy aby dana funkcja zwracała wartość używamy typu void.
Nazwa metody musi być jednoczłonowa. Z wyjątkiem słów kluczowych języka C#.
Parametry są to opcjonalne zmienne, które możemy wykorzystywać w ciele funkcji. Ich wartości są podawane podczas wywoływania metody.

Zobaczmy przykład:
Napiszmy funkcję, która będzie wypisywać na ekranie liczby od 0 do 10. A więc nasza funkcja nie musi zwracać żadnej wartości, będzie więc typu void. Nie musi posiadać żadnych parametrów. Modyfikator dostępu ustawimy na public. Zobaczmy zatem kod naszej funkcji:

public  void  WypiszLiczby(){
    for (int i = 0; <= 10; i++) {
       Console.WriteLine(i);
 	}
}

Funkcje dzielą się na dwa rodzaje: statyczne oraz instancyjne. Do funkcji instancyjnej mamy dostęp z poziomu obiektu danej klasy. Natomiast funkcje statyczne wywoływane są z poziomu danej klasy. W tej chwili może się to wydawać zagmatwane, ale z czasem wszystko będzie bardziej zrozumiałe.
Gdy funkcja jest statyczna, może bezpośrednio wywoływać jedynie metody statyczne. Dlatego do wywołania metod instancyjnych wymagany jest obiekt danej klasy.
W taj chwili nasza funkcja jest instancyjna i wywołuje ją metoda Main(), która jest statyczna więc wymagany jest obiekt do wywołania funkcji WypiszLiczby() zobaczmy przykład:

  class Program {
        static void Main() {
            Program P = new Program();
            P.WypiszLiczby();
            Console.ReadLine();
        }

        public void WypiszLiczby() {
            for (int i = 0; i <= 10; i++) {
                Console.WriteLine(i);
            }
        }
    }

Rezultat działania programu:

Metody

Rys. Efekt działania funkcji WypiszLiczby()

Przeróbmy teraz funkcję WypiszLiczby() na statyczna. Będzie wtedy ona mogła być wywołana bezpośrednio z klasy zobaczmy przykład:

public static void WypiszLiczby() {
            for (int i = 0; i <= 10; i++) {
                Console.WriteLine(i);
            }
        }

Wywołajmy teraz tą metodę:

 class Program {
     static void Main() {
           Program.WypiszLiczby();
            Console.ReadLine();
 }
public static void WypiszLiczby() {
      for (int i = 0; i <= 10; i++) {
          Console.WriteLine(i);
       }
  }
 }

Wynik na ekranie będzie identyczny. Jednak działanie aplikacji jest inne. Wybór między metodą statyczną, a instancyjną zależy od projektu. W pewnych wypadkach chcemy aby nasza metoda była wywoływana jedynie z obiektu danej klasy, a w innym przypadku z samej klasy.
Gdy wywołujemy metodę z tej samej klasy do której ona należy nie jest wymagane wpisywanie nazwy tej klasy przed nazwą metody. Zobaczmy przykład:

class Program {
    static void Main() {
       WypiszLiczby();
       Console.ReadLine();
    }

    public static void WypiszLiczby() {
        for (int i = 0; i <= 10; i++) {
            Console.WriteLine(i);
        }
    }
}

W przypadku metod instancyjnych możemy postąpić tak samo o ile metoda, w której wywołujemy funkcję nie jest statyczna zobaczmy przykład:

class Program {
    static void Main() {
        Console.ReadLine();
    }
   
    public  void TestB() { }
    public  void TestA() {
       TestB();
    }
}

Metody TestA() i TestB() są instancyjne. Możliwe jest wywołanie z metody TestA() funkcję TestB(). Kompilator nie zgłasza błędu.
Wróćmy teraz do przykładu z metodą WypiszLiczby() i poprawmy nasz kod, tak aby to użytkownik podawał liczbę graniczną do której funkcja będzie wypisywać na ekranie liczby.
Więc do naszej funkcji WypiszLiczby() musimy dodać parametr wejściowy:


public static void WypiszLiczby(int DoJakiej) {
            for (int i = 0; i <= DoJakiej; i++) {
                Console.WriteLine(i);
            }
        }

Wywołajmy teraz naszą procedurę:

class Program {
        static void Main() {
            Console.WriteLine("Podaj liczbę");
            int liczba = int.Parse(Console.ReadLine());
            Console.WriteLine("Rezuktat działania funkcji:");
            WypiszLiczby(liczba);
            Console.ReadLine();
        }

        public static void WypiszLiczby(int DoJakiej) {
            for (int i = 0; i <= DoJakiej; i++) {
                Console.WriteLine(i);
            }
        }

    }

Rezultat działania aplikacji:

Metody

Rys. Efekt działania aplikacji dla liczby 5

Napiszmy teraz procedurę statyczną, która będzie zwracać nam wynik dodawania dwóch liczb całkowitych. A wiec nasza funkcja będzie zwracała wartość typu int. Potrzebuje także dwóch parametrów wejściowych również typu int. Modyfikator dostępu ustawimy na public. Zobaczmy kod funkcji:

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

Jak widać procedura jest bardzo prosta wywołajmy ją teraz w programie:

class Program {
    static void Main() {
        Console.WriteLine("Podaj liczbę 1:");
        int liczba1 = int.Parse(Console.ReadLine());
        Console.WriteLine("Podaj liczbę 2:");
        int liczba2 = int.Parse(Console.ReadLine());
        int wynik = DodajLiczby(liczba1, liczba2);
        Console.WriteLine("Rezuktat działania funkcji:{0}", wynik);
        Console.ReadLine();
    }

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

}

Rezultat działania aplikacji:

Metody

Rys. Rezultat działania aplikacji dla liczb 2 oraz 5

Podsumowanie:

Poprzez stosowanie metod ,możemy znacząco skrócić kod i poprawić jego czytelność. Wyobraźmy sobie, że nie stosujemy metod i powielamy kod danej funkcji w wielu miejscach aplikacji. Co się stanie jak zaistnieje potrzeba modyfikacji tej metody? należało by znaleźć każde jej wystąpienie i je edytować. W przypadku gdy korzystamy z metody poprawiamy tylko kod w jednym miejscu.