我有一个关于封装的问题.据我所知,封装允许使用私有/受保护数据成员隐藏实现细节,并提供操作数据的公共方法和属性.这里的想法是防止类消费者直接修改数据成员.
但我对属性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;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果Inventory类消费者调用GetGuitars,他将获得在Inventory类中维护的吉他列表.现在,消费者可以修改列表,例如删除/添加/修改项目.对我来说,看起来我们没有封装.我想我应该在GetGuitars()中返回吉他列表项的副本.你怎么看?.
我对封装的理解是对的吗?
谢谢