delphi strict final用途

整理一下delphi2007後一些不常用的語法

關鍵字:strict
private域下成員變量或方法加了此修飾符,該類的子類將無法訪問private域下的變量和方法。

  TAbstractClass = class abstract
  private
    FID: string;
  strict private      //加了strict標記,繼承類無法訪問
    FName: string;
  public
    class var FVar: string;
    procedure print(); virtual;
  end;
  
  TExtendClass = class (TAbstractClass)
  public
    procedure print();override;
  end;
  
...

procedure TExtendClass .print;
begin
  ShowMessage(FID);      //訪問了父類的private
//  ShowMessage(FName);  //無法訪問FName
end;

關鍵字:sealed
這個是delphi借鑑於C#的語法,類申明時加上了此修飾符,表示該類無法被繼承了。

  TSealedClass = class sealed(TAbstractClass)
  public
    procedure print();override;
  end;

//下面的代碼,編譯器通過不了編譯:
  TSealedExtendClass = class(TSealedClass)      //cannot extend 
  public
    procedure print();override;
  end;

關鍵字:final
用於方法的後修飾,表明該方法不能被覆蓋。

  TFinalClass = class(TAbstractClass)
  public
    procedure print(); override; final;
  end;

//print方法不能被覆蓋
  TFinalExtendClass = class(TFinalClass)
  public
//    procedure print();override;     //cannot override a final method
  end;

Class var語法
可修飾於成員變量前,表明該變量由類直接持有,有點類似於類方法class function,類可以直接調用訪問。
這個變量,類不需要實例化就可以調用,並且全局共享該變量。

TAbstractClass = class abstract
  private
    FID: string;
  strict private      //加了strict標記,繼承類無法訪問
    FName: string;
  public
    class var FVar: string;
    procedure print(); virtual;
  end;

...

procedure test1();
begin
  TAbstractClass.FVar := 'test';
  ShowMessage(TAbstractClass.FVar); 	    //test
end;

procedure test2();
begin
  ShowMessage(TAbstractClass.FVar); 		//test
end;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章