7.1.4 创建对象
与其他流行的编程语言比较之后,让我们回到 Pascal,看看如何使用类。
一旦定义了类,我们就可以创建一个该类型的对象,代码片段如下(本节所有代码提取自 Dates1
示例)那样:
var
ADay: TDate;
begin
// 创建
ADay := TDate.Create;
// 使用
ADay.SetValue(1, 1, 2020);
if ADay.LeapYear then
Show('Leap year: ' + ADay.Year.ToString);
创建对象所用的表示法并不特别,但很强大。我们可以编写一个复杂的函数(比如LeapYear),然后访问每个TDate对象的值,就像这个类型是原始数据类型一样。
请注意,ADay.LeapYear
是一个类似于ADay.Year
的表达式,尽管第一个是一个函数调用,第二个是直接数据访问。正如我们将在第10章中看到的那样,Object Pascal
用于访问属性的表示法也是相同的。
注解: 在大多数基于 C 语言语法的编程语言中,调用不带参数的方法需要使用括号,如 ADay.LeapYear()。这种语法在 Object Pascal 中也是合法的,但很少使用。不带参数的方法在调用时一般不加括号。这与许多语言中的做法大相径庭,在许多语言中,对函数或方法的引用不带括号,返回的是函数地址。正如我们在第 4 章 "过程类型 "一节中所看到的,Object Pascal 使用相同的符号来调用函数或读取其地址,这取决于表达式的上下文。
上面代码片段的输出相当简单:
Leap year: 2020
让我再次将创建对象与用其他编程语言编写的类似代码进行比较:
// C# and Java languages (object reference model)
Date aDay = new Date();
// C++ language (two alternative styles)
Date aDay; // Local allocation
Date* aDay = new Date(); // "Manual" reference