Другие ответы правильно ответили на ваш основной вопрос: значение свойства ссылочного типа является ссылкой на экземпляр ссылочного типа.
Большой вопрос: "а что ты с этим делаешь?"Предположительно, вы не хотите получить код, который может получить список, чтобы иметь возможность изменить его.
Здесь есть несколько вариантов.
Во-первых, независимо от того, что вы делаете, я рекомендую прекратить использование ArrayList прямо сейчас и начать использовать более современный, безопасный тип для хранения списка вещей.List<string>
сразу приходит на ум.
Во-вторых, нужно ли, чтобы установщик свойства был публичным?Вы хотите, чтобы кто-нибудь мог изменить этот список?Или сам тип должен отвечать за его обновление?Я бы подумал о том, чтобы сделать установщик частным.
В-третьих, у нас есть более компактный синтаксис для «тривиального» свойства.Вы могли бы сказать
public List<string> SpillageListDescriptions { get; private set; }
, и компилятор сгенерирует для вас вспомогательное поле.
Обратите внимание, что List<string>
все еще допускает мутацию.
Если все, о чем заботится клиент, - это возможность перебирать список по одной за раз, то вы можете сделать это:
private List<string> descriptions = whatever;
public IEnumerable<string> SpillageListDescriptions
{
get
{
if (descriptions == null) yield break;
foreach(var description in descriptions)
yield return description;
}
}
, и теперь вызывающий абонент не сможетизменяйте список, потому что все, что вы им даете, это итератор, а не доступ к самому списку.
Или вы можете сделать:
private List<string> descriptions = whatever;
public IList<string> SpillageListDescriptions
{
get
{
return new ReadOnlyCollection<string>(descriptions);
}
}
И теперь у вызывающей стороны естьпросмотр списка только для чтения, который вызовет исключение, если они попытаются изменить его.