Заявление -
Object x = 10
имеет специальное название и называется Бокс. Это завершает тип значения внутри ссылочного типа. Возможно, вы думаете, что это должно создать ссылку. Да ты прав. Но это также означает, что создается новый объект - как указано в документе doc -
Когда тип значения помечен в бокс, необходимо выделить и сконструировать новый объект.
https://msdn.microsoft.com/en-us/library/yz2be5wk.aspx
Теперь, когда вы делаете -
object y = x;
Y и X имеют тот же объект здесь указывает на то же место памяти. Это хорошо. Но следующее заявление -
x = 20;
вызывает исключение. Видите ли, это утверждение является еще одним боксом, и по мере того, как бокс создает новые экземпляры, это создает еще один новый объект со значением 20 и помещает/ссылается на него с помощью X.
Итак, Y указывает на последнюю ячейку памяти, где указывается X в новую ячейку памяти.
Вы можете понять, почему, посетив ссылку, упомянутую выше.
И если вы убедите меня в причине, как я могу изменить объект, на который ссылаются как x, так и y? => Вы не можете! Поскольку C# не поддерживает явные указатели, и вы используете типы значений.
Однако, если X и Y являются ссылочными типами (т. Е. Class
объектов), вы могли бы это сделать.
Ссылка и значение здесь не имеют значения. Вообще. Вы переназначили x. Это не повлияет на y в этом примере независимо от типа типа. –
Используйте строку. Используйте int. Используйте свой собственный класс Foo. Они все ведут себя одинаково. –
Что бы вы ожидали от вас? Зачем? –