我有一个关于封装的问题。据我所知,封装可以使用私有/受保护的数据成员隐藏实现细节,并提供公共方法和属性来操作数据。这里的想法是防止类消费者直接修改数据成员。
但是,我对属性getter或其他返回私有/受保护数据成员的公共方法存在担忧。例如:如果我有这样的类
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()方法中返回Guitar清单项的副本。你认为呢?
我的封装理解正确吗?
谢谢
GetGuitars()
是const
的。 - StuartLC