Ответ 1
Когда вы работаете со ссылочными типами, вы всегда имеете дело со ссылками, поэтому в список будет добавлена ссылка (на самом деле копия ссылки). У вас фактически нет выбора; как работает язык.
Ну, я просмотрел дженерики и задал следующий вопрос:
List<someClass> list=new List<someClass>
SomeClass MyInstance=SomeClass();
list.Add(MyInstance);
Я не уверен, что будет добавлено в список - ссылка или объект ссылочного типа (указывающий на фактическое значение MyInstance).
EDIT: Или я добавлю значение (это ссылочный тип данных), который указывает на фактический объект?
Спасибо
Когда вы работаете со ссылочными типами, вы всегда имеете дело со ссылками, поэтому в список будет добавлена ссылка (на самом деле копия ссылки). У вас фактически нет выбора; как работает язык.
Предполагая, что someClass является ссылочным типом (например, классом), а не типом значения (например, struct), то его ссылкой.
Также я признаю, что было бы довольно дьявольски определить структуру с именем someClass
struct someClass
И здесь обязательная ссылка в статью о Джоне Ските о передаче параметров.
Так как someClass
является ссылочным типом, ссылка на MyInstance
будет скопирована в список.
будет добавлена ссылка, так как MyInstance
имеет ссылочный тип
В списке будет сохранена ссылка объекта вместо экземпляра объекта.
Фактически, значение хранилища списка используется с помощью массива, а массив хранит ссылку в стеке и сохраняет экземпляр объекта в куче.
Если вы разместите свой объект следующим образом
MyInstance = null
то вы не можете прочитать объект MyInstance,
но вы все еще можете прочитать объект в списке,
потому что у вас есть две ссылки на MyInstance,
Другими словами, объект имеет две ссылки,
один
SomeClass MyInstance=SomeClass();
другой хранится в списке,
и вы просто распоряжаетесь одним из них,
чтобы вы все еще могли прочитать список [0]