国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

再談多態--多態的應用舉例:

2019-11-18 18:46:24
字體:
來源:轉載
供稿:網友
再談多態--多態的應用舉例:
  這一段時間關于多態的討論可謂一浪高過一浪,各位大蝦都有高論出爐。本人也按奈不住,所以結合一下本人的工作實際,談談多態的應用問題。
  在我做系統的早期所應用的多態情況較少,多是出現這樣一些用到多態的情況
var
  s : TStrings;
begin
  s := TStringList.Create;
  try
    s.Add('hello!');
    ....
  finally
    s.free;
  end;
end;
上面這段程序可能在很多人的源程序中都出現過,而且以"TStringList.add"來搜delphi的help可以看到類似的例子。對于TStrings由于其方法create是abstract所以不能直接使用必須使用其子類的Create方法。這里就是把子類(TStringList)的對象實例賦給定義的父類(TStrings)對象;而Add在TStrings中是被聲明為virtual的,那么根據多態的特性s對象在使用Add方法時會調用其創建時所使用的類型(TStringList)的方法而不是TStrings。
  這里還是體現不出多態的好處,那么就拿我做過的一個表格系統為例子吧。做這個系統的時候要求做一系列表格,基本上是一個表格一個Form如:TgridForm1,TgridForm2...,然后這些Form內嵌在外部的一個TContainerForm中,由TContainerForm調用所有表格Form的方法如存盤(save).到這里都沒有問題,很簡單。注意現在問題來了。系統要求每一個表格Form獨立打包,而且程序開發過后會不斷的加入新的未知的表格Form,但不允許將整個程序重新codeing和compile,對于最終用戶來說只要down一個新的包含這個表格的包就能使用新的表格。這時多態的強大作用就發揮出來了。我是這么做的,做一個TParentgridForm一個所有表格Form的父類,它定義了所有可能的方法(如:save),當然是Virtual的。這時各個表格Form根據業務要求自行實現Save等方法。 對于TContainerForm來說它只知道TParentgridForm不知道具體的表格Form但是由于多態的作用,當TContainerForm在調用內嵌在它里面的Form的Save方法時會正確的調用各個表格Form的Save方法,這樣各個表格的業務邏輯就實現了。而且以后不管加多少個新的表格,TContainerForm都會實現其正確功能,并且勿需重新Compile整個系統了。哈哈,有點對象插件的味道。
  可見如果大家善于利用多態的話,在現實的編程中會享受到其極大的好處。特別是對于上面這種靈活度要求很高的系統。
  哈哈講了這么多不知道大家明白不。

上一篇:短消息開發接口

下一篇:實現控件的移動、改變大小

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 堆龙德庆县| 托克逊县| 垣曲县| 临夏市| 赫章县| 遵化市| 蒙山县| 西城区| 大洼县| 教育| 长阳| 蒲城县| 页游| 澄江县| 鲜城| 项城市| 陕西省| 山阳县| 阿鲁科尔沁旗| 类乌齐县| 姚安县| 涟水县| 新邵县| 渝中区| 榕江县| 拜泉县| 山东省| 孙吴县| 松桃| 濮阳市| 兴海县| 瓦房店市| 绥德县| 张家界市| 长宁区| 交城县| 威远县| 柳河县| 怀化市| 黄龙县| 永济市|