5

因此,当我一直在阅读/学习类及其中的方法时,我几乎没有发现将方法声明为公共与私有之间的实际区别。

我知道区别在于私有类只能在类内访问,而公共方法可以从类外的代码(其他类、函数)中访问。但我真正想知道的是:

  • 为什么在部署应用程序时想要/不想以一种或另一种方式声明它?
  • 是否有最佳实践可以指导是否将方法声明为公有或私有?

另外,我不知道这是否重要,但我主要在 Web 应用程序环境中学习 VB.Net 和 C#,因此具体说明会有所帮助。

4

4 回答 4

9

封装意味着您应该将每个类视为提供服务的机器。例如,椅子可以让您坐在上面,或者割草机可以让您修剪草坪。

私有方法与机器的内部工作有关。相反,公共方法与您(其他类)如何与机器交互有关。

示例一: 椅子...

坐在椅子上,你不需要知道填充物的体积或订书钉的数量,你基本上只需要知道它是否被占用,是否稳定。

  • 公共方法:IsStable、IsOccupied、Sit
  • 私有方法:CalculateStuffingVolume、CountNumberOfStaples

示例二: 割草机...

对于割草机,您需要知道它是否有足够的燃料(或已插入电源),刀片是否锋利,以及是否能够打开它。

  • 公共方法:GetFuelLevel、IsBladesSharp、TurnOn、TurnOff
  • 私有方法:燃烧等,太多无法想象。

结论:

因此,当您开发时,您将看到的只是...

示例一: Chair.Sit、Chair.IsStable 和 Chair.IsOccupied

或者

示例二:割草机.GetFuelLevel、割草机.IsBladesSharp、割草机.TurnOn、割草机.TurnOff

作为开发人员,您不必考虑室内装潢中的螺纹数量、油箱盖的颜色、刀片的 RPM 数量或椅子是否粘在一起或装订在一起。这种区别使得将您的应用程序放在一起变得更加容易,而不会被细节淹没。此外,它允许程序员只公开必要的信息,从而增加了安全级别。正如约翰所提到的,这可以防止 Person 类在不应该调用 Lawnmower.Combust(fuel) 时调用。

于 2013-03-20T01:38:48.627 回答
4

如果该方法是私有的,那么您不必考虑外部类错误地调用它。

这样做的好处之一是它允许将类的接口(它的公共部分)与其实现分开。如果没有人知道你是如何实现你的类的(也就是说,如果没有取决于你如何实现它的代码),那么你可以自由地改变你实现它的方式,而不会破坏任何其他代码。

于 2013-03-20T01:14:30.097 回答
2

它是面向对象编程中最重要的原则之一——封装

一个类通常提供一个(公共)接口。例如(伪代码):

class Rectangle {
    private length;
    private width;

    public getPerimeter() {
        // return calculatePerimeterOld();
        return calculatePerimeterNew();
    }

    private calculatePerimeterOld() {
        // old variant
    }

    private calculatePerimeterNew() {
        // Here the perimeter is caltulated.
        // so: perimeter = 2 * (length + width)
        // or so: perimeter = 2 * (length) + 2 * (width)
        // or maybe so: perimeter = length + width + length + width - (0.5 * length) + 2 * 0.25 * length)
        return perimeter;
    }

}

我可以随意更改我的私有方法。我可以用其他方法重命名或替换它们。但是我的公共界面将保持不变——它必须保持不变,因为这是我签署的合同,当我将方法定义为public. 一切,签署的private都是我的“黑匣子”,我可以在那里做任何我想做的事。

这是主要原因。另一个原因是,我们不应该向我们类的用户(-s)提供他们不需要的方法/信息。太多(信息)不好。

于 2013-03-20T01:58:38.053 回答
1

如果您正在开发一个仅由您维护的一次性网站,您可能会发现公共和私有功能的概念是不必要的。

但是,如果您将软件交付给其他人,并且他们构建在您的软件之上,那么这绝对是一个至关重要的概念。

可以把它想象成一台物理机器,里面有上千个旋钮和开关,但装在一个漂亮的盒子里,外面只有几个清晰标记的旋钮。

  • 公共函数和方法是您为外部各方与您的软件交互而创建的函数和方法。
  • 私有函数和方法是您为软件创建的与自身交互的函数和方法。

但是,如果它是由单个开发人员维护的一次性网站,那么这些差异就不那么重要了。

于 2013-03-20T02:22:26.597 回答