Вопрос по string, reference-type, c#, value-type – Сделайте ссылку на другую строку в C #
Насколько я знаю, строка в C # является ссылочным типом.
Таким образом, в следующем коде 'a'; должно быть равно «Привет», но оно все равно сохраняет свое значение «Привет». Зачем?
<code>string a = "Hello"; string b = a; b = "Hi"; </code>
хотя это правда, это совершенно не имеет отношения к вашему вопросу.
Что более важно, так это то, что вы неправильно понимаете, как ссылки работают с переменными. Ссылка не является ссылкой на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 переменной не обязательно должен быть ссылочный тип.
ООП.
Запустите приведенный ниже код, и вы будете удивлены, увидев ответ:
Создать простой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!
Прочитайте анологию воздушного шара вБаллонная аналогия для эталонного типа.

