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

4

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

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

string a = "Hello";
string b = a;
b = "Hi";
@ZeNo: это не имеет ничего общего с неизменяемостью строк. Это нормальное поведение ссылочного типа. porges
Проверьте это для деталей:stackoverflow.com/questions/2365272/why-net-string-is-immutable ZeNo
Подобный вопрос:stackoverflow.com/questions/636932/… SimpleVar

Ваш Ответ

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"
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

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

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!

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

Error: User Rate Limit Exceeded Nour Sabouny
Error: User Rate Limit Exceeded Nour Sabouny
Error: User Rate Limit Exceeded

Похожие вопросы