0Pricing
C# Academy · Урок

Локальные функции (примечание о C# 6) и перегрузка

Безопасно перегружайте методы (одно имя, разные параметры), а поскольку в C# 6 нет локальных функций, имитируйте их с помощью небольших закрытых вспомогательных методов.

«Локальные функции (примечание о C# 6) и перегрузка» — бесплатный урок C# Academy на CoddyKit. Это урок 3 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 3 уроков всего.

Обзор

Цель: использовать одно имя метода для связанных операций (перегрузка). В C# 6 нет локальных функций; вместо них используйте небольшие закрытые вспомогательные методы.

Основы перегрузки

Перегрузки имеют общее имя, но отличаются типами или количеством параметров. Компилятор выбирает наиболее подходящий вариант.

using System;

public static class MathX
{
  public static int Sum(int a, int b) { return a + b; }
  public static double Sum(double a, double b) { return a + b; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Console.WriteLine("Sum ints = " + MathX.Sum(2, 3));
    Console.WriteLine("Sum doubles = " + MathX.Sum(2.5, 3.1));
  }
}

Перегрузки по количеству параметров

Изменение арности (количества параметров) создает понятный набор перегрузок.

using System;

public static class Printer
{
  public static void Print(string text)
  {
    Console.WriteLine(text);
  }

  public static void Print(string text, int times)
  {
    for (int i = 0; i < times; i = i + 1)
    {
      Console.WriteLine(text);
    }
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Printer.Print("Hello");
    Printer.Print("Hi", 2);
  }
}

Правило типа результата

Правило: одним только типом результата нельзя различить перегрузки. Для допустимой перегрузки измените типы, количество или модификаторы параметров, например ref/out.

Альтернатива локальным функциям

В C# 6 нет локальных функций: вынесите небольшую закрытую функцию, чтобы основной метод оставался аккуратным.

using System;

// No local functions in C# 6: use a tiny private helper inside the class.
public class Report
{
  private static string Header(string title)
  {
    return "-- " + title + " --";
  }

  public static void Print(string title, string body)
  {
    Console.WriteLine(Header(title));
    Console.WriteLine(body);
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Report.Print("Status", "All green");
  }
}

Разрешение перегрузки

Компилятор выбирает наиболее подходящий вариант из набора перегрузок. Если вызовы неоднозначны, добавьте приведение типа или измените сигнатуры.

using System;

public static class Formatter
{
  public static string Format(int n) { return "N=" + n; }
  public static string Format(string s) { return "S=" + s; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Console.WriteLine(Formatter.Format(5));       // picks int overload
    Console.WriteLine(Formatter.Format("hello")); // picks string overload

    // Avoid ambiguity: cast when needed
    Console.WriteLine(Formatter.Format((int)3));
  }
}

Правило перегрузки

Быстрая проверка: какое утверждение о перегрузке методов в C# верно?

Итоги

Итоги: создавайте наборы перегрузок, изменяя типы или количество параметров, а не тип результата. В C# 6 заменяйте локальные функции небольшими закрытыми вспомогательными методами, чтобы методы оставались понятными.

Часто задаваемые вопросы

Урок «Локальные функции (примечание о C# 6) и перегрузка» бесплатный?

Да — полный текст урока «Локальные функции (примечание о C# 6) и перегрузка» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 3 уроков всего.

Чему я научусь в уроке «Локальные функции (примечание о C# 6) и перегрузка»?

Безопасно перегружайте методы (одно имя, разные параметры), а поскольку в C# 6 нет локальных функций, имитируйте их с помощью небольших закрытых вспомогательных методов. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C# Academy?

Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 3.

Сколько времени занимает урок «Локальные функции (примечание о C# 6) и перегрузка»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C# Academy?

Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Сигнатуры и возвращаемые значения; методы с телом-выражением; необязательные и именованные параметры; ref/out; перегрузка
  2. Необязательные и именованные параметры; ref/out/in (основы)
  3. Локальные функции (примечание о C# 6) и перегрузка
← Назад к C# Academy