Class (and Record) Helpers 圖片來源:Class Helper/Jobs Pictures |
Helper 是一個從 Delphi 2005 開始就已經支援的特色之一。
使用時機:
在需要擴充現有Class或是Record裡的函式功能時使用之。Delphi 7 之前我們要擴充或是修改現有Class功能時,我們會採取【基礎課程 - Delphi Interceptor Classes】這篇的作法。
然而在 Delphi 2005 之後,就可以利用 Helper 簡單作到對現有 Class 的擴充,以TStrings為例:我們在找尋字串是否在TStrings裡時,我們會用以下的判斷式:
if TStrings.IndexOf('Some String') = -1 then
raise Exception.Create('Not Found String!!');
現在,我們可以這樣做:
type
TStringsHelper = class helper for TStrings
public
function Contains(const AString : string) : boolean;
end;
function TStringsHelper.Contains(const AString: string): boolean;
begin
result := -1 <> IndexOf(AString);
end;
接著我們就可以這樣寫:
if TStrings.Contains('Some String') then
...
覺得只是這樣?我只能說你太小看Helper了,現在連TComboBox、TMemo和TListBox裡的Items/Lines的TStrings都有被支援到了!
這意味著你現在可以這樣寫:
if ListBox1.Items.Contains('some string') then ...
從XE3開始,Delphi又再度擴充了Helper的功能 -- 支援【基本型別】!
String和TDateTime也能夠被擴充了!
有外國網友已經寫成一個Helper單元來擴充TDateTime:
Helper record for TDateTime type
範例如下:
uses DateTimeHelper;
var
T1, T2: TDateTime;
begin
// Set date to 14th September 2012
T1 := TDateTime.Create(2012, 9, 14);
// Set date to today's date
T1 := TDateTime.Today;
// Set T2 to 1 year, 3 months and 10 days ahead of T1.
T2 := T1.AddYears(1).AddMonths(3).AddDays(10);
if T2.IsInLeapYear then
WriteLn(Format('%d is a leap year', [T2.Year]));
T1 := TDateTime.Create(1995, 2, 14); // Delphi's birthday
WriteLn(Format('Delphi is %d years old today.', [T1.YearsBetween(Now)]));
WriteLn('Delphi''s birthday was ' + T1.ToString('dd/mm/yyyy'));
end;
操作上比另外呼叫 DateUtils 要來得更直覺也更實用!
快來試試看這個超實用的秘技吧!
不錯哦!速度很快,介紹的很詳細
回覆刪除谢谢分享
回覆刪除