理解 Delphi 的类(十一) - 深入类中的方法[8] - 抽象方法与抽象类
生活随笔
收集整理的這篇文章主要介紹了
理解 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] - 抽象方法与抽象类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# 集合类(四):Hashtable
- 下一篇: MVP 2008全球峰会可预订宾馆,寻室