封装......最精确的描述?

时间:2011-05-12 19:59:18

标签: c# oop

我知道封​​装意味着一个对象不应该直接访问不同对象的成员...但我想这与公共领域有关?我假设公共方法不破坏封装..?我在这里不清楚,并且很乐意解释。

4 个答案:

答案 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
    }
}

当程序员想关闭帐户时,他们不必担心会遇到的各种步骤:

  1. ApplyPenalties
  2. CalculateFinalInterest
  3. DeleteAccountFromDB
  4. 他们应该说他们希望关闭它并且将采取所有必要的步骤。这就是为什么CloseAccount是公开的而其他人不是。

答案 2 :(得分:1)

我觉得考虑像不同工作的人这样的课程是最有帮助的。例如,如果我是项目经理,并且您是开发人员,我与您的公开合同就是我将为您分配任务。我如何确定优先级?这是我私下的细节;作为开发人员,你不需要知道这样做。

因此,在考虑封装时,将类的知识分为公共合同及其实现细节。第一个应该暴露 - 无论是通过公共属性,方法还是其他 - 并且第二个应该被封装在类中,没有办法让局外人找到。

答案 3 :(得分:1)

封装隐藏了对象实现的细节,因此对特定实现没有外部依赖性。 采取from msdn blog

查看此CodeProject post