我知道封装意味着一个对象不应该直接访问不同对象的成员...但我想这与公共领域有关?我假设公共方法不破坏封装..?我在这里不清楚,并且很乐意解释。
答案 0 :(得分:12)
封装就是你驾驶汽车:
而不是:
公开(制作public
)什么并隐藏(制作private
)如何。现在,你正在封装。
:)
答案 1 :(得分:2)
封装并不意味着没有访问成员。这意味着您应该只允许访问应该使用的成员,基本上限制访问而不是访问。
通过公开你允许访问的内容,通过将其设为私有而你不是。
本文更深入地介绍了各种访问修饰符:
http://www.csharp-station.com/Tutorials/lesson19.aspx
在本文中,他们给出了一个很好的例子:
using System;
class BankAccountProtected
{
public void CloseAccount()
{
ApplyPenalties();
CalculateFinalInterest();
DeleteAccountFromDB();
}
protected virtual void ApplyPenalties()
{
// deduct from account
}
protected virtual void CalculateFinalInterest()
{
// add to account
}
protected virtual void DeleteAccountFromDB()
{
// send notification to data entry personnel
}
}
当程序员想关闭帐户时,他们不必担心会遇到的各种步骤:
他们应该说他们希望关闭它并且将采取所有必要的步骤。这就是为什么CloseAccount
是公开的而其他人不是。
答案 2 :(得分:1)
我觉得考虑像不同工作的人这样的课程是最有帮助的。例如,如果我是项目经理,并且您是开发人员,我与您的公开合同就是我将为您分配任务。我如何确定优先级?这是我私下的细节;作为开发人员,你不需要知道这样做。
因此,在考虑封装时,将类的知识分为公共合同及其实现细节。第一个应该暴露 - 无论是通过公共属性,方法还是其他 - 并且第二个应该被封装在类中,没有办法让局外人找到。
答案 3 :(得分:1)
封装隐藏了对象实现的细节,因此对特定实现没有外部依赖性。 采取from msdn blog。
查看此CodeProject post。