声明私有函数与公共函数之间有什么实际区别?

时间:2013-03-20 01:11:58

标签: vb.net oop class methods

因此,当我一直在阅读/学习课程及其中的方法时,我发现将公开方法与私有方法之间的实际差异发现很少。

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

  • 在部署应用程序时,为什么要/不想以某种方式声明它?
  • 是否有最佳实践可以指导是否声明方法public vs private?

另外,我不知道它是否重要,但我在网络应用程序环境中主要学习VB.Net和C#,所以具体到那将有所帮助。

4 个答案:

答案 0 :(得分:9)

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

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

示例一: 主席......

当坐在椅子上时,你不需要知道馅料的数量或主食的数量,你基本上需要知道它是否被占用以及它是否稳定。

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

示例二: 割草机......

对于剪草机,你需要知道它是否有足够的燃料(或插入),如果刀片是锋利的,并且能够打开它。

  • 公共方法:GetFuelLevel,IsBladesSharp,TurnOn,TurnOff
  • 私人方法:燃烧等,想象的太多了。

<强>结论:

因此,当您正在开发所有内容时,您会看到...

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

实施例2: Lawnmower.GetFuelLevel,Lawnmower.IsBladesSharp,Lawnmower.TurnOn,LawnMower.TurnOff

作为开发人员,您不必考虑uphosltry中的线程数,燃料帽的颜色,刀片的RPM数或椅子是否粘合或装订在一起。这种区别使您可以更轻松地将应用程序放在一起而不会被详细淹没。此外,它允许程序员仅公开必要的信息,从而增加安全级别。正如约翰所提到的,这可以防止Person类在它们不应该的时候调用Lawnmower.Combust(燃料)。

答案 1 :(得分:4)

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

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

答案 2 :(得分:2)

这是面向对象编程最重要的原则之一 - encapsulation

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

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;
    }

}

我可以改变我想要的私人方法。我可以用其他方法重命名或替换它们。但是我的公共界面将保持不变 - 并且它必须保持不变,因为当我将mehod定义为public时,它是我签署的合同。一切,签名为private的是我的“黑盒子”,无论我想要什么,我都能在那里做。

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

答案 3 :(得分:1)

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

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

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

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

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