//方法重定義時, 避免編譯提示的辦法
{辦法1: 使用 reintroduce 指示字}TBass = class
{辦法2: 使用編譯器指令}
procedure Proc; virtual;
end;
TChild = class(TBass)
procedure Proc; reintroduce;
end;TBass = class
[3] - 方法在實現時的參數省略
procedure Proc; virtual;
end;
{$WARNINGS OFF}
TChild = class(TBass)
procedure Proc; virtual;
end;
{$WARNINGS ON}
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
end;
TBass = class
function Fun1(x,y: Integer): Integer; virtual; {Fun1 有 virtual 指示字}
function Fun2(x,y,z: Integer): Integer; {Fun2 有三個參數、一個返回 值}
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TBass }
function TBass.Fun1(x, y: Integer): Integer; {方法實現時, 不能帶 virtual 等指 示字}
begin
Result := x + y;
end;
function TBass.Fun2; {方法實現時可以只有函數名; 如果帶參數和返回值, 必須和定義 時一樣}
begin
Result := x + y + z;
end;
end.
[4] - 訪問限制(或者叫可見性)
//下面說的數據成員不僅僅指方法
TMyClass = class(TObject)
function Fun1: string; {公共區域的數據成員在默認狀態下會歸於 published 區}
//所謂默認狀態就是編譯指令為{$M+}, 如果是{$M-}這些數據成員會歸於 public 區 private
//譬如我們在 Object Inspector 窗口能夠見到的屬性、方法、事 件都是屬於 published 區的
function Fun2: string; {private 區的數據成員只能在類內訪問}
protected
function Fun3: string; {protected 區的數據成員只給自己或子孫類訪問}
public
function Fun4: string; {public 區的數據成員是公開的, 能夠給子孫類或實例化後 對象公開使用}
published
function Fun5: string; {published 區的數據成員首先類似 public; 它同時屬於 RTTI 信息}
end;
//Delphi 還有一個叫"友元類"的概念, 就是指在一個單元內的類直接是沒 有訪問限制的, 哪怕是在 private 區.{現在的解決方案是使用 strict 保留字}
TMyClass = class(TObject)
function Fun1: string;
strict private
function Fun2: string; {strict private 區的數據成員只能是類內部訪問}
strict protected
function Fun3: string; {strict protected 區的數據成員只能是類或子孫類訪問}
public
function Fun4: string;
published
function Fun5: string;
end;