Защо ни трябват методи
Когато програмата стане по-голяма, същият код започва да се повтаря на много места. Методите (в други езици — „функции") ни позволяват да опаковаме парче код, да му дадем име и да го извикваме колкото пъти искаме.
Ключово
Метод = именован блок код, който може да приема параметри и да връща резултат.
Анатомия на метод
модификатори тип-резултат име(параметри)
{
// тяло
return стойност; // ако typеът не е void
}Класически пример:
static int Square(int x)
{
return x * x;
}
// извикване:
int result = Square(5); // 25static— за сега го пиши винаги (ще обясним във ООП).int— този метод връща цяло число.Square— име на метода (PascalCase по конвенция).(int x)— един параметърxот типint.return x * x;— какво връщаме.
void — методи без връщан резултат
Ако методът просто „прави нещо" (без да трябва да върне стойност), типът е void:
static void Greet(string name)
{
Console.WriteLine($"Здравей, {name}!");
}
Greet("Мария"); // Здравей, Мария!Параметри
Няколко параметъра
static int Max(int a, int b)
{
return a > b ? a : b;
}
int m = Max(7, 12); // 12Стойности по подразбиране
static void Greet(string name = "приятел")
{
Console.WriteLine($"Здравей, {name}!");
}
Greet(); // Здравей, приятел!
Greet("Иван"); // Здравей, Иван!Претоварване (overloading)
Може да имаш няколко метода с едно и също име, стига да се различават по броя или типа на параметрите:
static int Add(int a, int b) => a + b;
static double Add(double a, double b) => a + b;
static int Add(int a, int b, int c) => a + b + c;
Add(2, 3); // 5 — първият
Add(2.5, 3.5); // 6.0 — вторият
Add(1, 2, 3); // 6 — третиятБележка
Това е удобно когато правиш сходни операции с различни типове. Не злоупотребявай — много претоварвания затрудняват четенето.
Обхват на променливите
Променлива, обявена вътре в метод, съществува само в този метод. Извън него — все едно я няма.
static void DoSomething()
{
int local = 42;
Console.WriteLine(local);
}
static void Main()
{
DoSomething();
// Console.WriteLine(local); // ❌ грешка — local не е видима тук
}Стек на извикванията
Когато извикаш метод, текущото място в кода се „запомня" в стек, и изпълнението скача в новия метод. Когато той приключи, се връща назад.
static int Square(int x) => x * x;
static int SumOfSquares(int a, int b) => Square(a) + Square(b);
static void Main()
{
Console.WriteLine(SumOfSquares(3, 4)); // 9 + 16 = 25
}Кога да изваждаш в метод
- Когато същия код го пишеш на две или повече места.
- Когато едно действие може да се опише с име (напр. „валидирай вход", „форматирай дата").
- Когато един метод е станал твърде дълъг и труден за четене.
Едно действие — един метод
Добрият метод прави едно ясно нещо, описано от името му. Ако трябва да обясняваш дълго какво прави — раздели го.
Какво трябва да запомниш
- Метод = именован блок код с параметри и (евентуално) връщана стойност.
void= не връща нищо; иначе указваш типа.- Параметрите са локални за метода — извън него не съществуват.
- Може да имаш няколко метода с едно име (overloading) с различни параметри.
- Извличай в метод, когато: повтаряш код, ясна задача с име, или методът е станал твърде дълъг.