Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю - Страница 84
- Предыдущая
- 84/642
- Следующая
Например, если вы хотите получить значение для
int
// Здесь будет получено значение только для а;
// значения для других двух параметров игнорируются.
FillTheseValues(out int a, out _, out _);
Обратите внимание, что вызываемый метод по-прежнему выполняет работу, связанную с установкой значений для всех трех параметров; просто последние два параметра отбрасываются, когда происходит возврат из вызова метода.
Модификатор out в конструкторах и инициализаторах (нововведение в версии 7.3)
В версии C# 7.3 были расширены допустимые местоположения для использования параметра
out
out
Использование модификатора ref
А теперь посмотрим, как в C# используется модификатор
ref
Обратите внимание на отличия между ссылочными и выходными параметрами.
• Выходные параметры не нуждаются в инициализации перед передачей методу. Причина в том, что метод до своего завершения обязан самостоятельно присваивать значения выходным параметрам.
• Ссылочные параметры должны быть инициализированы перед передачей методу. Причина связана с передачей ссылок на существующие переменные. Если начальные значения им не присвоены, то это будет равнозначно работе с неинициализированными локальными переменными.
Давайте рассмотрим применение ключевого слова
ref
string
int
bool
float
// Ссылочные параметры.
public static void SwapStrings(ref string s1, ref string s2)
{
string tempStr = s1;
s1 = s2;
s2 = tempStr;
}
Метод
SwapStrings()
Console.WriteLine("***** Fun with Methods *****");
string str1 = "Flip";
string str2 = "Flop";
Console.WriteLine("Before: {0}, {1} ", str1, str2); // До
SwapStrings(ref str1, ref str2);
Console.WriteLine("After: {0}, {1} ", str1, str2); // После
Console.ReadLine();
Здесь вызывающий код присваивает начальные значения локальным строковым данным (
str1
str2
SwapStrings()
str1
"Flop"
str2
"Flip"
Before: Flip, Flop
After: Flop, Flip
Использование модификатора in (нововведение в версии 7.2)
Модификатор
in
in
В рассмотренном ранее методе
Add()
Add()
х
у
Add()
static int Add2(int x,int y)
{
x = 10000;
y = 88888;
int ans = x + y;
return ans;
}
В данном случае метод возвращает значение
98888
static int AddReadOnly(in int x,in int y)
{
// Ошибка CS8331 Cannot assign to variable 'in int'
// because it is a readonly variable
// He удается присвоить значение переменной in int,
// поскольку она допускает только чтение
// х = 10000;
// у = 88888;
int ans = x + y;
return ans;
}
Когда в коде предпринимается попытка изменить значения параметров, компилятор сообщит об ошибке CS8331, указывая на то, что значения не могут быть изменены из-за наличия модификатора
in
- Предыдущая
- 84/642
- Следующая