4

我是德尔福的新手。在 TStrem 类的文档中,我读到它是一个抽象类。所以我认为当我尝试创建它时编译器出错了

stream := TStream.Create();

为什么不?

4

1 回答 1

7

Delphi 语言实际上并没有任何正式的抽象类概念。

确实可以将一个类定义为抽象类:

type
  TMyClass = class abstract
  end;

但是你可以很好地实例化这个类。事实上class abstract,Delphi 中的一个特性仅由长期废弃的 Delphi .net 编译器使用。

一个更有用的抽象类定义是包含abstract方法的。如果您尝试实例化这样的类,则会发出编译器警告。如果您愿意,可以通过编译器选项将这些警告升级为错误。

当文档提到TStream抽象时,实际上意味着它是“概念上”的抽象。事实上它甚至没有任何abstract方法,所以根据我上面的定义,它不是抽象的。

我真的不确定为什么TStream不包含抽象方法。我建议应该真正声明GetSize, SetSize, Read, Writeand 。我怀疑如果这个类是在今天设计的,那么它们会被声明,并且可能不是出于历史原因。Seekabstractabstract

实例化TStream是缺乏 Delphi RTL 经验的程序员常犯的错误。一旦犯了几次错误,通常就会吸取教训。不幸的是,系统没有提供简单的方法来标记这个错误。每个新程序员都必须通过艰苦的方式学习。

于 2017-06-22T11:30:07.210 回答