Я новичок в C# (первое сообщение) и в настоящее время работает над проблемой «инкапсуляции». В принципе у меня есть два класса, как это (упрощенный):Очистить property- (public) Список, не снимающий личный список (новичок)
class Myclass
{
private List<X> _list;
public List<X> list
{
get
{
return _list;
}
}
...
public Myclass (List<X> input)
{
_list = new List <X>(input);
}
...
}
class Testclass
{
List<X> inputList = new List<X>() {"bla", "bla"};
Myclass myclass = new Myclass(inputlist);
myclass.list.Clear();
List<X> newL = myclass.list;
}
Я не должен ничего менять со второго класса «TestClass».
И это моя проблема: myclass.list.Clear() очищает публичный список И частный список. Но я только хочу, чтобы он очистил публичный список или ничего не сделал, потому что в конце мне нужен список newL, который должен быть заполнен элементами из частного списка (открытый список через get-accessor).
Поскольку я должен решить проблему, не касаясь второго класса, я понятия не имею, что делать. Мне сказали, что публичный список называется собственностью, правда? Если да, то что называется публичным списком?
Как я уже сказал, я довольно плохой/новый в программировании в целом (19 лет), поэтому приветствуются новички-ответы.
Отличный ответ, насколько я понимаю. Полностью имеет смысл. Большое спасибо, я проведу его через секунду :) <3 –
Вы также можете использовать 'return _list.ToList()' вместо нового конструктора (я не знаю, какой из них наиболее эффективен) – fharreau
@fharreau Поскольку '.ToList()' делает [точно так же] (https://github.com/Microsoft/references/source/blob/master/System.Core/System/Linq/Enumerable.cs#L835) как мою строку кода, использование конструктора списка можно рассматривать как незначительно более эффективное (сохранение нулевой проверки). Поскольку это не тот уровень эффективности, о котором стоит позаботиться, используйте то, что лучше читает. – nvoigt