Можно ли проверить каждый тип переменной, чтобы увидеть значение или саму фактическую ссылку?
Просто для пояснения, значение переменной ссылочного типа является ссылкой.Ссылка - это значение.
Ссылка - это разновидность значения, также как int - это разновидность значения.В отличие от int, ссылка - это значение, которое может быть скопировано только и разыменовано ;вы не можете наблюдать его значение непосредственно в C #, потому что это значение - деталь реализации сборщика мусора.
Хранится ли ссылка как кодированное значение?
Да, именно так.На практике ссылка - это 32- или 64-разрядное целое число (в зависимости от того, участвуете ли вы в 32- или 64-разрядном процессе), которое указывает на некоторую структуру, известную сборщику мусора как связанную с данными объекта, на который указывает ссылка.
Если вы хотите посмотреть ссылки напрямую, инструмент для этого - отладчик.Загрузите ваш код C # в отладчик, скомпилируйте его, запустите, достигните точки останова и посмотрите на состояние стека и регистров.С небольшим умом вы сможете определить, какие ячейки стека и регистры соответствуют каким локальным переменным.Местоположения, соответствующие локальным переменным типа значения, будут содержать значения;те из ссылочного типа будут содержать значения, похожие на указатели.Если вы исследуете эти указатели в окне памяти, вы будете искать структуры, поддерживаемые сборщиком мусора, которые описывают содержимое объекта.