Все просто, правда.Поле в структуре просто содержит ссылку на объект, который является ссылочным типом.Если вы знакомы с другими языками, такими как C или C ++, вы можете сразу же распознать это как «указатель», который, по сути, представляет собой значение, содержащее адрес памяти, на который «указывает» объект.
Он не потребляет больше памяти, потому что структура хранит только ссылку на объект, а не полную копию объекта.И когда больше нет ссылок на этот объект, он становится пригодным для сборки мусора.
Вы можете подумать, что это похоже на то, как ссылочный объект может передаваться «по значению».В VB.NET это явно указывается с использованием ключевого слова ByVal
.В C # передача объектов по значению является просто значением по умолчанию, и вы должны явно указать, что вы хотите, чтобы они передавались по ссылке, используя ref
.В любом случае, дело в том, что эталонный объект все еще можно передавать «по значению», потому что все, что передается, это копия ссылки , а не копия всего объекта.
Конечно, одна из радостей управляемых сред, таких как .NET, заключается в том, что вам не нужно беспокоиться о деталях реализации.Ваш код будет работать нормально, если у вас есть структура, содержащая поля, представляющие как типы значений, так и ссылочные типы.
Также см. Мой ответ на этот очень похожий вопрос: Имеет ли смысл определять структуру с помощьючлен ссылочного типа? Стоит задуматься над тем, нужно ли вам вообще определять структуру.В большинстве случаев класс - лучший выбор.Но какой бы вы ни выбрали, поведение в терминах полей, содержащих ссылочные типы, будет одинаковым.