А теперь посмотрим, как в 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
Использование модификатора params
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT