什么是封装?它是如何实际隐藏数据的?

Ani*_*ani 6 .net oop encapsulation design-patterns hidden-field

搜索提出了一个简单的定义:数据隐藏.

但是,请考虑以下两个示例:

1)第一个例子:

Class Employee
{
    public int age;
}
Run Code Online (Sandbox Code Playgroud)

2)第二个例子:

Class Employee
{
    private int age;

    public int getAge(){return age;}
}
Run Code Online (Sandbox Code Playgroud)

问题:
在上述两个示例中,没有数据隐藏,age要么被其他人修改,要么被其他人查看.数据隐藏在哪里?封装如何帮助上面的例子?

Fre*_*örk 25

还有就是数据隐藏.第二示例隐藏如何的值被存储.此外,第二个示例使该值对于类外的代码是只读的.通过拥有私有字段并通过方法或属性公开它们,您可以立即获得一些优势,其中一些优点是:

  • 访问控制粒度; 您可以选择将值公开为只读,读写或只写.
  • 在存储值之前验证输入的可能性
  • 可以添加日志记录或其他审计机制

请注意,封装不仅仅是有访问控制.封装的主要用途是隐藏调用代码的实现细节.当调用代码想要检索的值,它不应该依赖于从那里的价值来.在内部,类可以将值存储在字段中,或者从某些外部资源(例如文件或数据库)中检索它.也许该值根本不存储,而是即时计算.这与调用代码无关.

当您通过方法或属性公开值时,您可以屏蔽调用此类详细信息的代码,这也使您可以更改实现,而不会影响调用代码.

  • @anil:不,一点也不.封装是关于隐藏实现细节.通过将字段设为私有并通过方法公开它,您可以封装内部实现细节.该值可以存储在字段中,磁盘上的文件中,数据库中,可以即时计算,无论如何.调用代码确实(并且应该)不知道这些细节.这就是封装. (2认同)