Как работает ключевое слово ref - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Есть вопрос оп технической части работы С#. Я в нем еще совсем новичок. Точнее по работе ключевого слова ref. Не могу понять как оно технически рабоатет. Как я понимаю при передаче массива в метод - передается ссылка на массив, т.к массив это ссылочный объект класса System.Array. Я могу вносить изменения в массив в методе и тем самым изменять оригинал. Но если я не использую слово ref и перопределю переданный массив словом new - я тем самым не должен изменить исходный т.к в куче просто создасться еще один массив, и локальная ссылка arr в методе function будет ссылаться на этот новый массив. Т.е в мейне массив останется без изменений. Тут вроде все понятно. Непонятни козникают при использовании ключевого слова Ref. Я могу внутри метода переопределить массив словом new и тем самым изениться исходный массив в мейне. При этом temp_arr[0]=50, так же не влияет на исходный массив. Почему? Есть предположение что при передаче передается физическая копия ссылки, некое 16ричное значение адреса ячейки в памяти, а при передаче по слову ref передается ссылка на адрес, типа как ссылка на ссылку. П.С. гугление и мсдн результатов не дали. Пока не знаю насколько принципиально вникать в мехиназм работы, но хотелось бы разобраться.
Листинг программы
  1. class Program
  2. {
  3. static void function(ref int[] arr)
  4. {
  5. int[] temp_arr = arr;
  6. arr =new int[] { 2, 1, 0 };
  7. temp_arr[0] = 50;
  8. }
  9. static void Main(string[] args)
  10. {
  11. int[] arr = new int[] { 0, 1, 2 };
  12. foreach (int a in arr)
  13. {
  14. Console.Write(a + " ");
  15. }
  16. Console.WriteLine();
  17. function(ref arr);
  18. foreach (int a in arr)
  19. {
  20. Console.Write(a + " ");
  21. }
  22. Console.WriteLine();
  23. }
  24. }

Решение задачи: «Как работает ключевое слово ref»

textual
Листинг программы
  1. int[] arr = ...
  2. Foo(ref arr);
  3.  
  4. void Foo(ref int[] bla)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут