小编use*_*287的帖子

OO设计封装

我有一个关于封装的问题.据我所知,封装允许使用私有/受保护数据成员隐藏实现细节,并提供操作数据的公共方法和属性.这里的想法是防止类消费者直接修改数据成员.

但我对属性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()中返回吉他列表项的副本.你怎么看?.

我对封装的理解是对的吗?

谢谢

oop encapsulation

5
推荐指数
1
解决办法
206
查看次数

标签 统计

encapsulation ×1

oop ×1