国产探花免费观看_亚洲丰满少妇自慰呻吟_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整個系統了。哈哈,有點對象插件的味道。
  可見如果大家善于利用多態的話,在現實的編程中會享受到其極大的好處。特別是對于上面這種靈活度要求很高的系統。
  哈哈講了這么多不知道大家明白不。

上一篇:短消息開發接口

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

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

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 泽州县| 盐亭县| 卓尼县| 河东区| 镇沅| 桃园县| 广汉市| 曲水县| 安丘市| 屯留县| 兰考县| 马龙县| 五台县| 鄱阳县| 无棣县| 襄汾县| 闽侯县| 广丰县| 余姚市| 盱眙县| 鸡泽县| 常德市| 奈曼旗| 长泰县| 天等县| 枣强县| 平邑县| 富顺县| 天全县| 曲水县| 自治县| 巴林右旗| 蓬莱市| 弥渡县| 田阳县| 江华| 都昌县| 黄龙县| 客服| 晋中市| 霍山县|