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