Методы — это функции, определённые в классе. C# поддерживает богатый набор возможностей для параметров — опциональные/именованные аргументы, модификаторы ref/out/in, массивы — и (несколько методов с одним именем, но разными параметрами).
Методы — это функции, определённые в классе. C# поддерживает богатый набор возможностей для параметров — опциональные/именованные аргументы, модификаторы ref/out/in, массивы — и (несколько методов с одним именем, но разными параметрами).
paramspublic int Add(int a, int b) => a + b; // expression-bodied (concise)
public string Greet(string name, string greeting = "Hello") // default parameter
{
return $"{greeting}, {name}";
}
Greet("Ann"); // "Hello, Ann"
Greet("Ann", greeting: "Hi"); // named argument
Методы указывают тип возврата, имя и параметры. Параметры по умолчанию делают аргументы опциональными, а именованные аргументы позволяют передавать значения по имени (понятнее, можно пропустить опциональные).
// ref — pass by reference (method can modify the caller's variable)
void Increment(ref int x) { x++; }
int n = 5; Increment(ref n); // n is now 6
// out — for returning multiple values (must be assigned in the method)
bool TryParse(string s, out int result) { result = ...; return true; }
if (int.TryParse("42", out int value)) { } // the common TryX pattern
// in — pass by reference but READ-ONLY (performance for large structs)
void Process(in LargeStruct data) { }
out широко используется в паттерне TryParse (возврат флага успеха и результата безопасно); ref позволяет изменять переменную вызывающего кода; in передаёт большие структуры эффективно без копирования.
// params — variable number of arguments
int Sum(params int[] numbers) => numbers.Sum();
Sum(1, 2, 3, 4); // any number
// OVERLOADING — same name, different parameters
void Print(int x) { }
void Print(string s) { }
void Print(int x, int y) { }
Print(5); // calls the int version — resolved by argument types
Перегрузка позволяет нескольким методам иметь одно имя, различаясь типами/количеством параметров — компилятор выбирает подходящий. params принимает переменное количество аргументов.
Методы — это строительные блоки поведения в C#, и понимание их богатых возможностей параметров важно для написания гибкого и выразительного кода.
Знание того, как определять методы (включая лаконичный синтаксис expression-bodied), использовать параметры по умолчанию и именованные параметры (для опциональных аргументов и читаемых вызовов), и применять перегрузку методов (одно имя, разные параметры — для интуитивных API, которые обрабатывают разные типы аргументов) — это повседневные знания.
Модификаторы параметров особенно важны для понимания: out широко используется в распространённом паттерне TryParse (int.TryParse(s, out var result) — безопасный возврат флага успеха и результата без исключений, типичный, идиоматичный паттерн C#), ref позволяет изменять переменную вызывающего кода, а in передаёт большие структуры по ссылке для производительности.
Понимание этого — методов, возможностей параметров (опциональные/именованные/params), перегрузки для гибких API и модификаторов ref/out/in (особенно идиомы out-based TryParse) — фундаментально для написания методов C# и использования множества .NET API, которые полагаются на эти возможности.
Поскольку методы и их параметры центральны для всего кода на C#, а такие возможности, как перегрузка, опциональные параметры и паттерн TryX, встречаются постоянно, овладение ими — это основное, необходимое знание для эффективной разработки на C#.