日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/7/14 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 理解 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] - 抽象方法与抽象类的全部內容,希望文章能夠幫你解決所遇到的問題。

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