У C# методи можуть мати декілька вхідних параметрів, а також повертати більше ніж одне значення.
Це досягається кількома способами: використанням out/ref параметрів, поверненням кортежів (Tuple або ValueTuple), а також поверненням спеціально створених класів або структур.
Звичайні методи в C# можуть приймати довільну кількість аргументів з різними типами.
static int Sum(int a, int b, int c)
{
return a + b + c;
}
static void Main()
{
int result = Sum(2, 4, 6);
Console.WriteLine($"Сума: {result}");
}
outКлючове слово out дозволяє передати змінну в метод, який змінить її значення та поверне через параметри.
static void Divide(int dividend, int divisor, out int quotient, out int remainder)
{
quotient = dividend / divisor;
remainder = dividend % divisor;
}
static void Main()
{
Divide(17, 5, out int q, out int r);
Console.WriteLine($"Частка: {q}, Остача: {r}");
}
refref дозволяє передати змінну в метод та змінити її значення. На відміну від out, змінна має бути ініціалізована до виклику.
static void Increment(ref int x, ref int y)
{
x++;
y++;
}
static void Main()
{
int a = 3, b = 7;
Increment(ref a, ref b);
Console.WriteLine($"a = {a}, b = {b}");
}
З C# 7.0 з’явилися ValueTuple, які дозволяють методам повертати кілька значень у зручному форматі.
static (int Sum, double Average) CalculateStats(int[] numbers)
{
int sum = numbers.Sum();
double avg = numbers.Average();
return (sum, avg);
}
static void Main()
{
var (total, avg) = CalculateStats(new int[] { 2, 4, 6, 8 });
Console.WriteLine($"Сума: {total}, Середнє: {avg}");
}
Іноді зручно створити власний тип для групи значень, які метод повинен повертати.
class Point
{
public double X { get; set; }
public double Y { get; set; }
}
static Point GetCoordinates()
{
return new Point { X = 5.5, Y = 7.2 };
}
static void Main()
{
Point p = GetCoordinates();
Console.WriteLine($"X = {p.X}, Y = {p.Y}");
}