Передача ссылки по ссылке (ref) - C#

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

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

Вопрос тут такого себе индивидуального характера. Встретился с этим впервые. Подскажите, почему метод Named, работает только тогда когда я значения в его вызов в мэйне передаю через оператор ref? Все было бы понятно, если бы значения было значимым типом. Но ведь стринг, это же ссылочный тип, так почему тогда в методе Неймед, значения переменной а не изменилось? Возможно, я что-то не так понял, когда проходил эту тему и теперь еще больше запутался. Исправьте если я не правильно нарисовал.
static void Main(string[] args)
        static void Main(string[] args)
        {
            string a = "";
            Named(ref a);
            Console.WriteLine(a);
            Console.ReadLine();
        }
 
        public static void Named(ref string a)
        {
            a = "hello!";
        }

Решение задачи: «Передача ссылки по ссылке (ref)»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication5 {
    class Program {
        static void Main(string[] args) {
            string s1 = "Hello";
            string s2 = "";
            Console.WriteLine(s1 == s2);                       //Тут мы ожидаем False, и так и есть
            Console.WriteLine(object.ReferenceEquals(s1, s2)); //Тут тоже ожидаем False, и тоже все верно
            Console.WriteLine();
 
            s2 += "Hello";
            Console.WriteLine(s1 == s2);                      //Тут ожидаем True, и опять совпадает
            Console.WriteLine(object.ReferenceEquals(s1, s2));//Тут ожидаем False, так как ссылки вроде разные... Однако, не все так просто...
            Console.ReadLine();
        }
    }
}

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


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

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

12   голосов , оценка 3.917 из 5
Похожие ответы