4

Вопрос по reference-type, value-type, string, c# – Сделайте ссылку на другую строку в C #

Насколько я знаю, строка в C # является ссылочным типом.

Таким образом, в следующем коде 'a'; должно быть равно «Привет», но оно все равно сохраняет свое значение «Привет». Зачем?

string a = "Hello";
string b = a;
b = "Hi";
5 ответов
  • 7

    Линия

    b = "Hi"; меняет какую строкуb Рекомендации.a еще ссылки"Hello".

    string a = "Hello";  // Set a to reference the string "Hello"
    string b = a;        // Set b to reference the same string as a
    b = "Hi";            // Set b to reference the string "Hi"
    

  • 1

    Вы меняете ссылку b. Не а. Сама ссылка копируется

    пока объект остается нетронутым. Так что b = & quot; Привет & quot; копирует ссылку на "Привет" возражать в б. Это не влияет на.

  • 27

    Ряд ответов указывают на то, что строки неизменны

    хотя это правда, это совершенно не имеет отношения к вашему вопросу.

    Что более важно, так это то, что вы неправильно понимаете, как ссылки работают с переменными. Ссылка не является ссылкой наvariable, Думайте о ссылке как о кусочке строки. Вы начинаете с этого:

    a----------------------Hello
    

    Затем вы говорите, что "b = a", что означаетattach another piece of string to the same thing that a is attached to:

    a----------------------Hello
                          /
    b---------------------
    

    Затем вы говорите: «Теперь присоедините b к Привет».

    a----------------------Hello
    
    b----------------------Hi
    

    Вы также думаете, что ссылки работают так:

    a----------------------Hello
    

    Тогда я говорю, чтоb это другое имя дляa:

    a/b ----------------------Hello
    

    Тогда я меняюb, который меняетсяaпотому что это два имени для одной и той же вещи:

    a/b ----------------------Hi
    

    Или, возможно, вы думаете, что ссылки работают так:

    a----------------------Hello
    

    Тогда я говорю, чтоb относится кa:

    b -------------- a ----------------------Hello
    

    Тогда я меняюb, который косвенно меняетa:

    b -------------- a ----------------------Hi
    

    То есть вы ожидаете сделать ссылку наvariableвместоvalue, Выcan сделать это в C #, вот так:

    void M(ref int x)
    {
        x = 1;
    }
    ...
    int y = 0;
    M(ref y);
    

    Это означает, что «во время вызова к М, х - это другое имя для у». Изменение x меняет y, потому что они являются одной и той же переменной. Обратите внимание, чтоtype переменной не обязательно должен быть ссылочный тип.

  • 0

    НЕТ!

    То, что вы сделали, - это создали две ссылки («a», «b») на строку «Hello». Сb = "Hi" вы меняете "b" для ссылки на строку "Привет".

    & APOS; & APOS; никогда не изменится таким образом.

  • 1

    Концепция ссылочного типа - самая запутанная вещь среди программистов

    ООП.

    Запустите приведенный ниже код, и вы будете удивлены, увидев ответ:

    Создать простойBook класс со свойством под названиемName и напишите следующий код вMain способ применения.

    Book a = new Book() {Name = "book a"};
    Book b = new Book() {Name = "book b"};
    
    Book c = a; //line 3
    
    Book a = b; //Line 4
    
    Console.WriteLine(c.Name);
    

    И, несомненно, вы ожидаете, что ответом будет «книга b»; из-за строки 4. Вы думаете, что какc являетсяa и после этогоa сталb  который также сделаетc равняетсяb.

    Which is not the case!

    Прочитайте анологию воздушного шара вБаллонная аналогия для эталонного типа.