Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Методы в C#: определение, вызов, рекурсия и параметры

Что такое метод

Метод — это группа инструкций, выполняющих задачу. Любая C# программа имеет точку входа — метод Main. Для использования метода нужно: (1) определить, (2) вызвать.

Синтаксис определения метода

<модификатор_доступа> <тип_возвращаемого_значения> <ИмяМетода>(список_параметров)
{
    // тело метода
}

Элементы метода

Пример: метод FindMax

public class NumberManipulator
{
    public int FindMax(int num1, int num2)
    {
        int result;
        if (num1 > num2)
            result = num1;
        else
            result = num2;
        return result;
    }
}

Вызов методов

Через экземпляр класса (для нестатических методов):

NumberManipulator n = new NumberManipulator();
int ret = n.FindMax(100, 200);
Console.WriteLine($"Max: {ret}"); // 200

Статические методы вызываются через имя класса: ClassName.Method().

Рекурсивные методы

Метод может вызывать сам себя. Классический пример — факториал:

public int Factorial(int n)
{
    if (n <= 1) return 1;
    return n * Factorial(n - 1);
}

// Вызов:
Console.WriteLine(Factorial(6)); // 720
Console.WriteLine(Factorial(7)); // 5040
Console.WriteLine(Factorial(8)); // 40320

Важно: Рекурсия требует базового случая (base case), иначе — StackOverflowException.

Передача параметров

МеханизмКлючевое словоОписание
По значению(по умолчанию)Копируется значение аргумента. Изменения внутри метода не влияют на оригинал.
По ссылкеrefПередаётся ссылка на переменную. Изменения затрагивают оригинал. Переменная должна быть инициализирована до вызова.
Выходной параметрoutКак ref, но переменная НЕ обязана быть инициализирована до вызова. Метод ОБЯЗАН присвоить значение перед выходом. Используется для возврата нескольких значений.
Только для чтения по ссылкеin (C# 7.2+)Передача по ссылке с запретом изменения в методе. Оптимизация для больших структур.
Массив параметровparamsПозволяет передать переменное число аргументов как массив. Только последний параметр.

Примеры

// По значению
void ByValue(int x) { x = 10; }
int a = 5; ByValue(a); // a остаётся 5

// По ссылке (ref)
void ByRef(ref int x) { x = 10; }
int b = 5; ByRef(ref b); // b становится 10

// Выходной (out)
void ByOut(out int x) { x = 10; }
int c; ByOut(out c); // c = 10 (c не был инициализирован)

// params
int Sum(params int[] numbers)
{
    int sum = 0;
    foreach (int n in numbers) sum += n;
    return sum;
}
Console.WriteLine(Sum(1, 2, 3, 4)); // 10
Console.WriteLine(Sum(new[] { 5, 5 })); // 10

Дополнительные возможности (современный C#)

Язык C

  1. Абстрактные классы и методы в C#: практическое руководство
  2. Частичные классы и методы в C#: понимание и применение
  3. Sealed-классы и sealed-методы в C#: когда использовать, примеры и повышение безопасности кода
  4. Освоение перегрузки методов в C#: концепции, примеры и лучшие практики
  5. Функции в C: объявление, определение, вызов, аргументы (по значению и по ссылке), рекурсия
  6. Битовые поля в C: компактное хранение флагов и малых целых чисел
  7. Функции с переменным числом аргументов в C: практическое руководство
  8. Java 8 Default Methods: улучшение интерфейсов и обратная совместимость
  9. Интегрирование в MATLAB: от неопределенных интегралов к суммам Римана
  10. Понимание делегатов в C#: Руководство по ссылкам на методы и событиям