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#

Источники: Microsoft methods, static keyword

Что почитать дальше по C#

Если нужен общий маршрут по теме, откройте рубрику C#. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x