(delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(访问说明符)
7.3 private、protected和public访问说明符
strict private
访问说明符表示在类的任何方法(包括同一单元中其他类的方法)之外都不能访问的字段和方法,这与大多数其他 OOP 语言中 private 关键字的行为一致。
一个类可以有任意数量的数据字段和任意数量的方法。但是,为了实现良好的面向对象方法,数据应隐藏或封装在使用它的类中。例如,当你访问一个日期时,改变日期本身的值是没有意义的。事实上,改变日期的值可能会导致一个无效的日期,如 2 月 30 日。使用方法访问对象的内部表示可以限制产生错误情况的风险,因为方法可以检查日期是否有效,如果无效,则拒绝修改新值。适当的封装尤为重要,因为它赋予了类编写者在未来版本中修改内部表示的自由。
封装的概念非常简单:只需将类想象成一个 “黑盒子”,其中有一小部分是可见的。可见部分称为类接口,允许程序的其他部分访问和使用该类的对象。然而,当你使用对象时,它们的大部分代码都是隐藏的。你很少知道对象有哪些内部数据,通常也无法直接访问这些数据。然而,你可以使用方法来访问对象的数据或对其进行操作。
使用私有和受保护成员进行封装是面向对象的一种解决方案,可实现信息隐藏这一经典编程目标。
Object Pascal
有五个基本的访问(或可见性)说明符:private、protected 和public。第 10 章将讨论第六种,即published。以下是这五个基本说明符:
public
访问说明符表示字段和方法可以在定义它们的单元中以及程序的任何其他部分自由访问。protected
和 strict protected 访问说明符用于表示可见性有限的方法和字段。只有当前类及其派生类(或子类)可以访问受保护的元素,除非它们在同一个类中,或者在任何情况下都取决于strict修饰符。我们~将在下一章的 "受保护字段和封装 "部分再次讨论这个关键字。
一般来说,类的字段应该是private
或strict private
,而方法通常是 public
。但情况并非总是如此。如果方法只需要在内部执行某些部分操作,那么这些方法可以是private或protected。如果您相当确定字段的类型定义不会改变,并且可能希望在派生类中直接操作字段(如下一章所述),则字段可以是protected,不过很少推荐这样做。
作为一条通用规则,您应尽量避免使用public字段,而应提供一些使用属性直接访问数据的方法,我们将在第 10 章中详细介绍。属性是其他 OOP 语言封装机制的扩展,在 Object Pascal
中非常重要。
如前所述,private访问说明符只限制单元外的代码访问该单元中声明的类的某些成员。这意味着,如果两个类在同一个单元中,它们的private字段就不会受到保护,除非它们被标记为strict private
,这通常是一个好主意。
注解:C++ 语言有 "友元"的概念,即这个类能够访问另一个类的私有数据。按照这一术语,我们可以说,在 Object Pascal 中,同一单元中的所有类都自动被视为友元。