日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

理解 Delphi 的类(十一) - 深入类中的方法[8] - 抽象方法与抽象类

發布時間:2025/7/14 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 理解 Delphi 的类(十一) - 深入类中的方法[8] - 抽象方法与抽象类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
//抽象方法類似與接口; 在沒有接口的年代 Delphi 是用抽象方法來模擬接口的; 我想它最終會被接口替代.{下面就定義了兩個抽象方法} TMyClass = class(TObject)procedure Proc1; virtual; abstract; {抽象方法首先應該是一個虛方法或動態方法}function Fun: string; dynamic; abstract; {抽象方法也叫純虛方法} end;{抽象方法在本類中只有定義、沒有實現;抽象方法應該在子類中實現.如果一個類包含了抽象方法, 那么這個類也就成了抽象類;抽象類只能通過其子類來實例化, 自己不能生成對象.最常用的一個抽象類應該是 TStrings 了, 舉例: } varList: TStrings;i: Integer; beginList := TStringList.Create;for i := 0 to 99 do List.Add(IntToStr(i));Memo1.Lines := List;List.Free; end;{ TStrings 類中包含了抽象方法, 但這些抽象方法在其子類 TStringList 中都得到了實現;因此, 我們雖然定義的是 TStrings 類的變量, 卻要通過 TStringList 來實現.這里就有個問題, 我們直接使用 TStringList 不行嗎? 為什么還要繞個彎?我覺得是: 這樣才更符合"多態"的思想吧;僅就本例而言 Memo1.Lines 本身就是 TStrings 類型的, 這樣可以避免類型沖突. 舉例說明: } //這是個錯誤的例子 varList: TStringList; {如果定義為 List: TStrings 可消除錯誤} beginList := TStringList.Create;List := Memo1.Lines; {這里會出問題}List.Free; end;//在 Delphi 7 及以前的版本中, 我們是通過查看一個類是不是有抽象方法來判斷是不是抽象類的.{現在可以用 class abstract 聲明抽象類, 譬如:} TBass = class abstract(TObject)procedure Proc;function Fun: string; virtual; abstract; end;{但這好像僅僅是個提示, 如果其中沒有抽象方法, class abstract 的定義只是個擺設, 譬如:} TBass = class abstract(TObject)procedure Proc;function Fun: string; end;{和}TBass = class(TObject)procedure Proc;function Fun: string; end;{使用起來沒看出區別!}

轉載于:https://www.cnblogs.com/del/archive/2008/01/17/1042187.html

總結

以上是生活随笔為你收集整理的理解 Delphi 的类(十一) - 深入类中的方法[8] - 抽象方法与抽象类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。