我有一个关于封装的问题。据我所知,封装可以使用私有/受保护的数据成员隐藏实现细节,并提供公共方法和属性来操作数据。这里的想法是防止类消费者直接修改数据成员。
但我担心返回私有/受保护数据成员的属性获取器或其他公共方法。例如:如果我有这样的课
public class Inventory
{
private List<Guitar> guitars = new List<Guitar>();
public void AddGuitar(string serialnumber, string price)
{
Guitar guitar = new Guitar(serialnumber, price);
guitars.Add(guitar);
}
public List<Guitar> GetGuitars()
{
return guitars;
}
}
现在,如果 Inventory 类消费者调用 GetGuitars,他将获得在 Inventory 类中维护的吉他列表。现在消费者可以修改列表,例如删除/添加/修改项目。对我来说,看起来我们没有封装。我认为我应该在 GetGuitars() 中返回吉他列表项的副本。你怎么看?。
我对封装的理解正确吗?
谢谢