Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю - Страница 81
- Предыдущая
- 81/642
- Следующая
На заметку! Модификаторы доступа для методов (и классов) раскрываются в главе 5. Параметры методов рассматриваются в следующем разделе.
До настоящего момента в книге каждый из рассматриваемых методов следовал такому базовому формату:
// Вспомните, что статические методы могут вызываться
// напрямую без создания экземпляра класса,
class Program
{
<b> // static воэвращаемыйТип ИмяМетода(список параметров)</b>
<b> // { /* Реализация */ }</b>
static int Add(int x, int y)
{
return x + y;
}
}
В нескольких последующих главах вы увидите, что методы могут быть реализованы внутри области видимости классов, структур или интерфейсов (нововведение версии C# 8).
Члены, сжатые до выражений
Вы уже знаете о простых методах, возвращающих значения, вроде метода
Add()
Add()
static int Add(int x, int y) => x + y;
Обычно такой прием называют "синтаксическим сахаром", имея в виду, что генерируемый код IL не изменяется по сравнению с первоначальной версией метода. Он является всего лишь другим способом написания метода. Одни находят его более легким для восприятия, другие — нет, так что выбор стиля зависит от ваших персональных предпочтений (или предпочтений команды разработчиков).
На заметку! Не пугайтесь операции
=>
Локальные функции (нововведение в версии 7.0, обновление в версии 9.0)
В версии C# 7.0 появилась возможность создавать методы внутри методов, которые официально называются локальными функциями. Локальная функция является функцией, объявленной внутри другой функции, она обязана быть закрытой, в версии C# 8.0 может быть статической (как демонстрируется в следующем разделе) и не поддерживает перегрузку. Локальные функции допускают вложение: внутри одной локальной функции может быть объявлена еще одна локальная функция.
Чтобы взглянуть на средство локальных функций в действии, создайте новый проект консольного приложения по имени
FunWithLocalFunctions
Add()
Add()
static int Add(int x, int y)
{
// Здесь должна выполняться какая-то проверка достоверности.
return x + y;
}
Как видите, крупных изменений здесь нет. Есть только комментарий, в котором указано, что реальный код должен что-то делать. А что, если вы хотите отделить фактическую реализацию цели метода (возвращение суммы аргументов) от логики проверки достоверности аргументов? Вы могли бы создать дополнительные методы и вызывать их из метода
Add()
Add()
AddWrapper()
static int AddWrapper(int x, int y)
{
// Здесь должна выполняться какая-то проверка достоверности.
return Add();
int Add()
{
return x + y;
}
}
Содержащийся в
AddWrapper()
Add()
AddWrapper()
Add()
AddWrapper()
На заметку!
AddWrapper()
Add()
AddWrapper()
В версии C# 9.0 локальные функции обновлены, чтобы позволить добавлять атрибуты к самой локальной функции, ее параметрам и параметрам типов, как показано далее в примере (не беспокойтесь об атрибуте
NotNullWhen
#nullable enable
private static void Process(string?[] lines, string mark)
{
foreach (var line in lines)
{
if (IsValid(line))
{
- Предыдущая
- 81/642
- Следующая