繁体   English   中英

Delphi tstream:创建时的奇怪行为

[英]Delphi tstream: strange behaviour on create

我是Delphi的新手。 在TStrem类的文档中,我读到它是一个抽象类。 所以我认为当我尝试使用时,编译器会出错

stream := TStream.Create();

为什么不?

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

确实,您可以将类定义为抽象类:

type
  TMyClass = class abstract
  end;

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

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

当文档将TStream称为抽象​​时,它实际上意味着它在概念上是抽象的。 实际上它甚至没有任何abstract方法,因此根据我上面的定义它并不是抽象的。

我真的不确定为什么TStream不包含抽象方法。 我建议将GetSizeSetSizeReadWriteSeek真正声明为abstract 我怀疑,如果这个课程今天被设计,那么他们将被宣布为abstract并且可能不是出于历史原因。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM