[英]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
不包含抽象方法。 我建議將GetSize
, SetSize
, Read
, Write
和Seek
真正聲明為abstract
。 我懷疑,如果這個課程今天被設計,那么他們將被宣布為abstract
並且可能不是出於歷史原因。
實例化TStream
是Delphi RTL經驗不足的程序員常犯的錯誤。 一旦犯了幾次錯誤,通常會吸取教訓。 不幸的是,系統沒有提供標記這個錯誤的簡單方法。 每個新程序員都必須學習艱難的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.