簡體   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