C#
Вызов метода в C#: обычный метод, static и метод объекта
Вызов метода в C# — это команда выполнить уже объявленный метод. Если метод находится рядом в Program.cs, достаточно написать имя и скобки: SayHello();. Если метод принадлежит объекту, сначала нужно создать объект, а потом вызвать метод через точку: user.PrintName();
Самый простой вызов
static void SayHello()
{
Console.WriteLine("Привет");
}
SayHello();
Скобки обязательны. Без них метод не выполняется. Строка SayHello(); означает: найди метод с таким именем и запусти его
Метод с параметром
static void PrintTotal(decimal total)
{
Console.WriteLine($"Итого: {total}");
}
PrintTotal(1500);
Значение 1500 передается в параметр total. Если метод ждет параметр, вызвать его без аргумента нельзя
Ошибка:
PrintTotal();
Компилятор подскажет, что не хватает аргумента
Метод, который возвращает результат
static int Sum(int a, int b)
{
return a + b;
}
int result = Sum(10, 5);
Console.WriteLine(result);
Если метод возвращает значение, его можно сохранить в переменную, передать дальше или сразу вывести
Вызов метода объекта
Допустим, есть класс:
public class User
{
public string Name { get; set; } = "";
public void PrintName()
{
Console.WriteLine(Name);
}
}
Вызов:
User user = new User { Name = "Анна" };
user.PrintName();
Здесь PrintName не static, значит он вызывается у конкретного объекта. Метод использует данные этого объекта, например Name
Static и обычный метод
static-метод вызывается через класс или напрямую внутри того же класса:
public static int Add(int a, int b)
{
return a + b;
}
Вызов:
int result = Calculator.Add(2, 3);
Обычный метод требует объект:
Calculator calculator = new Calculator();
int result = calculator.Add(2, 3);
Если компилятор пишет, что для нестатического метода нужна ссылка на объект, значит вы пытаетесь вызвать обычный метод как static
Вызов метода из другого класса
Если метод находится в другом классе, сначала посмотрите, static он или обычный. Для обычного метода нужен объект:
OrderCalculator calculator = new OrderCalculator();
decimal total = calculator.CalculateTotal(500, 4);
Для static-метода объект не нужен:
decimal total = OrderCalculator.CalculateTotal(500, 4);
Путаница между этими двумя вариантами — одна из самых частых ошибок в первых проектах. Если метод должен работать с состоянием объекта, например с текущей корзиной, пользователем или настройками, обычно он не должен быть static. Если метод просто считает результат из переданных параметров и не хранит состояние, static может быть уместен
Как проверить вызов
Поставьте внутри метода простой вывод:
Console.WriteLine("Метод вызван");
Если строка не появляется, значит код до метода не дошел: не сработала кнопка, условие не выполнилось или вызов написан не там. Если строка появилась, но результат неправильный, проблема уже внутри логики метода или в переданных аргументах
Частые ошибки
Первая ошибка — объявить метод, но не вызвать его. Вторая — забыть скобки. Третья — вызвать метод объекта через имя класса. Четвертая — передать аргументы не того типа. Пятая — создать метод внутри другого метода в старом стиле кода и запутаться с областью видимости
Мини-задача: создайте класс OrderCalculator с методом CalculateTotal(decimal price, int count). Создайте объект класса, вызовите метод для цены 500 и количества 4, выведите результат
Что почитать дальше по C#
- Методы C#: как создать, вызвать и передать параметры
- Классы и свойства в C#: первый пример
- Простая программа на C#
- Рубрика C#
Источники: Microsoft methods, static keyword
Что почитать дальше по C#
Если нужен общий маршрут по теме, откройте рубрику C#. Для соседних задач пригодятся эти разборы:
- C# с нуля: первый проект через dotnet new
- Как установить .NET SDK для C#
- Классы и свойства в C#: первый пример
- Типы, переменные и строки в C#