C#
Пример
class Program
{
static void AddValue(ref int value)
{
value = 5; // присваиваем новое значение
}
static void Main(string[] args)
{
int price = 7; // обязательно нужно инициализировать
AddValue(ref price);
Console.WriteLine(price);
// на экране увидим 5
}
}
C#
Пример
class Program
{
static void AddValue(List<int> list)
{
list.Add(5);
}
static void Main(string[] args)
{
List<int> myList = new List<int>();
AddValue(myList);
foreach(int value in myList)
Console.WriteLine(value);
// на экране увидим
}
}
Если в методе снова инициализируется
ссылочный тип то нужно использовать
ref
C#
Пример
class Program
{
static void AddValue(ref List<int> list)
{
list = new List<int>();
list.Add(23);
list.Add(38);
list.Add(39);
}
static void Main(string[] args)
{
List<int> myList = new List<int>();
myList.Add(8);
myList.Add(12);
AddValue(ref myList);
foreach(int value in myList)
Console.WriteLine(value);
// на экране увидим 23, 38, 39
}
}
На заметку! Не следует путать передачу по ссылке
ref с понятием
ссылочных типов. Это разные понятия.
Параметр метода может быть изменен с помощью модификатора
ref независимо от того, принадлежит ли он к типу значения или ссылочному типу.
При передаче по ссылке
ref упаковка-преобразование типа значения не производится.
C#
Пример
class Program
{
static void AddValue(out int value)
{
value = 5; // обязательно нужно присвоить значение (если не присвоить будет ошибка компиляции)
}
static void Main(string[] args)
{
int price; // можно не инициализировать
AddValue(out price);
Console.WriteLine(price);
// на экране увидим 5
}
}