Почему ссылочные типы в C# ведут себя по-разному?
Обучаюсь языку C#. В процессе его "ковыряния" возник вопрос: почему при передаче массива в метод его изменение отображается во внешнем контексте, а у строки нет, хотя и то и другое - ссылочные типы?
Ответы (1 шт):
Автор решения: A K
→ Ссылка
Поменять массив внутри метода не получится, посмотрите:
void Main()
{
var arr = new int[] { 1, 2, 3 };
Test1(arr);
arr.Dump();
}
private void Test1(int[] arr)
{
arr = null;
}
Выведет:
А вот в вашем примере вы меняете не массив, а его элементы - а внутри массива у вас значимый тип (int), он заменяется.
Аналогично и с другими ссылочными типами:
void Main()
{
var book = new Book { Id = 1, Title = "asdf"};
Test1(book);
book.Dump();
}
private void Test1(Book book)
{
book.Id = 2;
book = null;
}
public class Book
{
public int Id { get; set; }
public string Title { get; set; }
}
Со строками такой вариант не проходит, потому что строки в C# - неизменяемый тип.



