Я использую C# для записи списка, который будет содержать уникальные экземпляры класса. Я хочу написать функцию, которая добавляет один экземпляр этого класса и возвращает указатель на него.C# List Добавить и получить ссылку
public class Marble
{
public Marble(int ID)
{
// Initialize based on unique ID
}
}
public class Bag
{
private List<Marble> marbles = new List<Marble>();
public Marble Add(int ID)
{
Marble m = new Marble(ID);
marbles.Add(m);
return m;
}
}
Кажется, это было бы более оптимизировано, чем добавление нового мрамора и поиск подходящего идентификатора. Однако будет ли Marble m выходить из сферы действия при возвращении? Насколько я понимаю Списки, это просто динамический массив указателей. Если Marble m перестанет существовать, будет ли указатель списка более недействительным?
До тех пор, пока есть экземпляр «Сумки», где-то упоминается, этот экземпляр должен иметь список мраморов. –
«Мраморный м» будет ссылочным типом - он не выйдет за рамки, когда он будет возвращен из метод. См. Эту статью Джона Скита для получения дополнительной информации - http://jonskeet.uk/csharp/references.html – Tim
В C# ссылочные типы (которые в этом случае есть) всегда будут храниться указателем. Не беспокойтесь о разрушаемых вещах, у вас есть сборщик мусора, чтобы сделать это. 'return m' вернет указатель, и m не будет уничтожен, пока вы не закончите с ним. – thijmen321