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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值