Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю - Страница 84
- Предыдущая
- 84/642
- Следующая
Например, если вы хотите получить значение для
int// Здесь будет получено значение только для а;// значения для других двух параметров игнорируются.FillTheseValues(out int a, out _, out _);Обратите внимание, что вызываемый метод по-прежнему выполняет работу, связанную с установкой значений для всех трех параметров; просто последние два параметра отбрасываются, когда происходит возврат из вызова метода.
Модификатор out в конструкторах и инициализаторах (нововведение в версии 7.3)
В версии C# 7.3 были расширены допустимые местоположения для использования параметра
outoutИспользование модификатора ref
А теперь посмотрим, как в C# используется модификатор
refОбратите внимание на отличия между ссылочными и выходными параметрами.
• Выходные параметры не нуждаются в инициализации перед передачей методу. Причина в том, что метод до своего завершения обязан самостоятельно присваивать значения выходным параметрам.
• Ссылочные параметры должны быть инициализированы перед передачей методу. Причина связана с передачей ссылок на существующие переменные. Если начальные значения им не присвоены, то это будет равнозначно работе с неинициализированными локальными переменными.
Давайте рассмотрим применение ключевого слова
refstringintboolfloat// Ссылочные параметры.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();Здесь вызывающий код присваивает начальные значения локальным строковым данным (
str1str2SwapStrings()str1"Flop"str2"Flip"Before: Flip, FlopAfter: Flop, FlipИспользование модификатора in (нововведение в версии 7.2)
Модификатор
ininВ рассмотренном ранее методе
Add()Add()хуAdd()static int Add2(int x,int y){ x = 10000; y = 88888; int ans = x + y; return ans;}В данном случае метод возвращает значение
98888static 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
- Следующая
