Локальные функции (примечание о 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# 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 — локальная установка не требуется.
Все уроки этого курса
- Сигнатуры и возвращаемые значения; методы с телом-выражением; необязательные и именованные параметры; ref/out; перегрузка
- Необязательные и именованные параметры; ref/out/in (основы)
- Локальные функции (примечание о C# 6) и перегрузка