Class:java
type //class 聲明或者定義繼承一個類class(TObject). TDate = class private fDate: TdateTime; Month, Day, Year: Integer; public //構造函數,若是定義了constructor,默認構造函數無效 constructor Create (y, m, d: Integer); constructor Create; overload; //Destructor用於標識析構函數, 析構函數在類被釋放時自動調用.析構函數只容許覆蓋, 再不容許重載 //Free時,會調用Destory,調用前會判斷是否爲nil,可是調用後不會將self置爲nil,由於不知道自己是否被引用。 destructor Destroy;override; //procedure 無返回值 procedure SetValue (y, m, d: Integer); overload; //overload 重載 procedure SetValue (NewDate: TDateTime); overload; function LeapYear: Boolean; function GetText: String; procedure Increase; proceure Y; //虛擬函數,通C++相同,經過virtual table(VMT)來找到virtual函數入口,包含父類的VMT function Voice:String; virtual; //動態方法,結果和virtual相同,差異在於編譯時候使用動態方發表(DMT), //子類使用惟一的數字+動態方法地址構成DMT,可是不包含祖先的DMT。因此運行時內存小,可是速度慢 //function Voice:String; dynamic; //抽象函數,同C++,抽象函數,不能定義實例 function Jump:String; virtual; abstract; //message方法可用於處理windows消息,可調用postMessage(TDateObj.hANDLE,wm_User, 0, 0); var是引用 procedure WMUser(var Msg: TMessage); message wm_User; //屬性名 : 屬性值類型 read 屬性讀函數/屬性值變量 write 屬性寫函數/屬性值變量,write屬性能夠省略,變成只讀 property Year: Integer read GetYear write SetYear; end; constructor TDate.Create; begin Day:= 0; end; type TClassB = clas(TDate) public //父類能夠訪問子類方法 class procedure X; //和C++同樣叫虛擬函數,和java同樣有override關鍵字...... 必須父類函數是virtual,若是不是,是覆蓋而不是刻意動態綁定 function Voice:String; override; end procedure TDate.GetYear; begin Result := YearOf(fDate); end; procedure TDate.Y; begin //Self訪問當前對象,無參數方法能夠省略() Self.X; end;
類型轉換和異常處理:windows
//is 判斷類型 if obj is ClassB then xxxxx //as 類型轉換 (obj as ClassB).do //異常處理 try…except…end; try…finally…end; //和try…except…end不一樣,該結構的finally部分總被執行 //不存在try…except…finally…end結構來既處理異常,又保護資源分配的結構 //容許以下結構,從而實現既處理異常,又保護資源的分配 try try…except…end finally end; //觸發異常,相似C++ throw raise xxxException;
流程處理:數組
//If語句的一般結構是If...Then...else, else語句也能夠不要. //在If語句內若是有多個子語句, 則必須用begin...End結構進行區分. if a > b then begin WriteLn('a>b'); End else WriteLn('b>a'); //For關鍵字引出For循環結構, 用於作指定次數的循環. for i := 1 to 100 do sum := sum + i; //若是循環變量是遞減的, 則能夠用DownTo關鍵字 for i := 100 downto 1 do Inc(sum); //Case語句用於完成條件選擇, Case語句的的被選擇對象必須是有序類型, 包括整型, 枚舉類型, 字符型等. //Case語句必須由end結束,若是沒有相符合的選擇項, 能夠加入else來做出通用選擇. function GetDays(AYear,AMonth: Integer): Integer; begin case AMonth of 1,3,5,7,8,10,12: Result := 31; 4,6,9,11: Result := 30; 2: begin if IsLeapYear(AYear) then Result:=29 else Result:=28; end; else Result:=0; end; //While關鍵字用於引出While循環語句, 循環前先進行循環條件的判斷, 若是條件爲真則執行循環. i := 0; while i < 100 do begin sum := sum + i; Inc(i); end; //Until關鍵字用於判斷repeat循環結構的循環條件, //若是循環條件爲真, 則退出循環.Until必須與repeat關鍵字聯合使用. i := 0; repeat sum := sum + i; Inc(i); until(i >= 100); //Goto語句用在跳轉行號, 能夠跳轉到當前結構層內任意位置. //必須在聲明處用label關鍵字聲明行號. //因爲Goto語句會破壞程序的結構, 不推薦使用. var a,b: Integer; label X,Y; begin if a > b then goto X else goto Y; X: WriteLn('a > b'); Y: WriteLn('b > a'); end;
與或非ide
//Xor用於取異或, 當兩個操做數相等時, 返回False, 不等時返回True. var a,b: Integer; begin a := 2; b := 3; if a xor b then WriteLn('a xor b') else WriteLn('a not xor b'); end; //1、表示邏輯與 必須用括號括起 if (a>0) and (b>0) then //2、表示位運算 必須用括號括起 var a,b,c: Integer; begin c := (a and b); end; //1、表示邏輯或 必須用括號括起 if (a>0) or (b>0) then //2、表示位運算 必須用括號括起 var a,b,c: Integer; begin c := (a or b); end;
數據類型函數
基本數據類型 類型 類型說明 使用說明 整形 Integer 標準數據類型,使用前沒必要定義 實型 Reall 標準數據類型,使用前沒必要定義 字符型 Character 標準數據類型,使用前沒必要定義 字符串型 String 標準數據類型,使用前沒必要定義 布爾型 Boolean 標準數據類型,使用前沒必要定義 枚舉型 Enumerated 高級數據類型,先定義後使用 子界型 Subrange 高級數據類型,先定義後使用 集合型 Set 高級數據類型,先定義後使用 數據類型 Aray 高級數據類型,先定義後使用 文件類型 File 高級數據類型,先定義後使用 記錄類型 Record 高級數據類型,先定義後使用 類類型 Class 高級數據類型,先定義後使用 類引用類型 Class Reference 高級數據類型,先定義後使用 接口類型 Interface 高級數據類型,先定義後使用 指針類型 Pointer 高級數據類型,先定義後使用 過程類型 Procedural 高級數據類型,先定義後使用 可變類型 Variant 高級數據類型,先定義後使用 整形數據 類型 類型說名符 字節數 取值範圍 整型 Integer 4 -2 147 483 648——2 147 483 647 序數型 Cardinal 4 0——4 294 967 295 短整型 ShortInt 1 -128——127 長整型 LongInt 4 -2 147 483 648——2 147 483 647 小整型 SmallInt 2 -32 768——32 767 64位整數 Int64 8 -2 63次方——2 63次方-1 字型 Word 2 0——65 535 長字型 LongWord 4 0——4 294 967 295 字節型 Byte 1 0——255 實型數據 類型 類型說明符 字節數 取值範圍 單精度實型 Single 4 -3.4X10 38方—— -1.5X10-39方 ,1.5X10-39方——3.4X10 38方 雙精度實型 Double 8 -1.7X10 308方—— -5.0X10-324方,5.0X10-324方——1.7X10 308方 擴展型 Extended 10 -1.1X10 4932方—— -3.6X10 -4951方,3.6X10 -4951方——1.1X10 4932方 貨幣型 Currency 8 -922 337 203 685 477.580 8——922 337 203 685 477.5870 實型 Real 8 -1.7X10 308方—— -5.0X10 -324方,5.0X10-324方——1.7X10 308方 字符型數據 類型 名稱 字節數 取值範圍 字符型 Char 1(2) 擴展ANSI字符集 寬字符型 WideChar 2 UniCode字符集 Ansi字符型 AnsiChar 1 擴展ANSI字符集 字符串型數據 類型 類型說明符 最大長度 字符串型 String 2 31方個字符 短字符型 ShortString 255個字符 長字符串型 Ansisting 2 31方個字符 寬字符串型 WideSring 2 30方個字符 布爾形數據 類型 類型說明符 字節數 取值 布爾型 Boolean 1 只能爲0(False)或1(True) 長布爾型 LongBOOl 4 0(False)或非0(True) 寬布爾型 WideBool 2 0(False)或非0(True) 字節布爾型 ByteBool 1 0(False)或非0(True)
集合類型post
//Array用於表示數組, 任何的對象都能被聲明成數組.數組分爲靜態和動態的2種. //靜態數組 var Arr1: array [1..10] of Integer; //動態數組, 因爲聲明時不知其元素個數, 因此必須在後期用SetLength方法設置數組的大小 var Arr2: array of Integer; //數組做爲參數時, 不能傳入數組的大小, 只能傳入數組名, 而後用Length方法獲取數組的元素個數 function X(A: array of Integer): Integer; var i: Integer; begin Result := 0; for i := 0 to Length(A)-1 do Result := Result + A[i]; end; //Set關鍵字用於聲明集合類, 集合類容許用集合運算符, 如in等進行操做. //集合的元素個數不超過256個 type TCol = (cA,cB,cC); TCols = set of TCol; //操做時容許使用加減符號來添加或刪除某個集合元素 var Cols: Tcols; begin Cols := Cols + [cA,cB]; end;
其餘關鍵字spa
//On關鍵字用於異常處理, 指出發生的異常, 並獲取異常信息. try i := StrToInt(s); except on E: exception do ShowMessage(E.Message); end; //With關鍵字用於將相同的對象集合起來處理, 它能夠省去輸入大量重複的代碼, 使代碼看上去比較精簡. with Form1.Memo1.Lines do begin Clear; Append('abc'); Append('def'); SaveToFile('C:\demo.txt'); end; //上面這段代碼若是不使用With語句, 則顯得很是冗餘複製內容到剪貼板代碼: Form1.Memo1.Lines.Clear; Form1.Memo1.Lines.Append('abc'); Form1.Memo1.Lines.Append('def'); Form1.Memo1.Lines.SaveToFile('C:\demo.txt'); //In用於判斷一個集合中是否包含某個元素.被判斷的內容必須是單個集合元素和一個集合的實例. type TCol = (cA,cB,cC); TCols = set of TCol; var Cols: TCols; begin Cols := [cA,cB]; if cA in Cols then ShowMessage('cA in Cols') else ShowMessage('cA not in Cols'); end; //In也用於工程文件中, 用於標識某個文件是否被工程所引用. Uses Unit1 in 'Unit1.pas'; //In能夠被用在For語句中, 用於循環取出一個集合中的元素. var s: string; sl: TStringList; begin ... for s In sl do begin ShowMessage(s); end; end; //Of關鍵用於和其餘關鍵字構成指定的結構.Of能夠與Case, Class, Array, File, Set, Object連用. //Case語句: case Tag Of 0: Result := 'a'; 1: Result := 'b'; end; //Class語句: type TDemo = class of TComponent; //Array結構: var MyInt: array of Integer; //File結構: var MyFile: file of Byte; //Set語句: type TCol = (cA,cB,cC); TCols = set of TCol; //Object結構: type MyFun = function(I: Integer): Integer of Object;