我是Delphi的新手。在TStrem类的文档中,我读到它是一个抽象类。 所以我认为当我尝试使用
创建它时,编译器会出错stream := TStream.Create();
为什么不呢?
答案 0 :(得分:7)
Delphi语言实际上没有任何抽象类的正式概念。
确实可以将类定义为抽象类:
type
TMyClass = class abstract
end;
但是你可以很好地实例化这个类。事实上,Delphi中的class abstract
是一个仅被长期放弃的Delphi .net编译器使用的功能。
抽象类的更有用的定义是包含abstract
方法的定义。如果您尝试实例化此类,则会发出编译器警告。如果您愿意,可以通过编译器选项将这些警告提升为错误。
当文档将TStream
称为抽象时,它实际上意味着它在概念上是抽象的。实际上它甚至没有任何abstract
方法,所以根据我上面的定义,它不是抽象的。
我真的不确定为什么TStream
不包含抽象方法。我建议GetSize
,SetSize
,Read
,Write
和Seek
应该真正声明为abstract
。我怀疑,如果这个课程今天被设计,那么他们将被宣布abstract
并且可能不是出于历史原因。
实例化TStream
是Delphi RTL经验不足的程序员常犯的错误。一旦犯了几次错误,通常会吸取教训。不幸的是,系统没有提供标记这个错误的简单方法。每个新程序员都必须努力学习。