Проверка & x в отладчике (C #) - PullRequest
0 голосов
/ 29 октября 2009

Делаем это в консольной программе:

object x = new string(new char[0]);

Если после назначения x установить точку останова и вызвать окно быстрого просмотра, что будет отображать отладчик для & x? Я ожидал адрес Х, но похоже, что я не прав?


РЕДАКТИРОВАТЬ: я спрашиваю об этом из-за другой поток , который указывал, что если один делает

object x = new string(new char[0]);
object y = new string(new char[0]);

x и y будут ссылаться на один и тот же объект. Поскольку я хотел проверить это, я попытался проверить адреса этих переменных в отладчике с помощью оператора &, и сначала у меня сложилось впечатление, что они разные. Но после расширения результата значения второго уровня совпадают, поэтому они кажутся «реальными адресами».

Ответы [ 2 ]

2 голосов
/ 29 октября 2009

Если я отображаю x, я получаю "" с типом, сообщаемым как "object {string}" - это то, что я ожидаю.

&x отображает 0x062fd7f0 (в моем случае) с типом, сообщаемым как "объект & *". Расширение, которое дает другой указатель и тип как «объект &».

В первом случае отладчик имеет достаточно информации, чтобы определить тип и показать что-то полезное.

Во втором случае отладчик «знает», что переменная является объектом, поэтому может отображать только указатели (я думаю).

UPDATE

Ваше обновление имеет смысл. Значения, сообщаемые &x и &y, являются указателями на переменные. Значение, которое они содержат, является указателем на неизменяемую строку "".

0 голосов
/ 29 октября 2009

Вы не можете сделать это, потому что управление памятью обрабатывается CLR

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...