zoukankan      html  css  js  c++  java
  • 在接口中定义属性

    unit Unit1;
    interface
    uses
     Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
     Dialogs, StdCtrls;
    type
     TForm1 = class(TForm)
      Button1: TButton;
      procedure Button1Click(Sender: TObject);
     end;
     {此接口声明了一个 Name 属性; 因为接口没有字段, read/write 都只能从方法}
     IMyInterface = interface
      function GetName : string;
      procedure SetName(val : string);
      property Name : string read GetName write SetName;
     end;
     {类实现的是接口的读写方法, 属性还是属于接口的; 类可以提供一个储存属性的字段}
     TMyClass = class(TInterfacedObject, IMyInterface)
     private
      FName: string;
     public
      function GetName: string;
      procedure SetName(val: string);

     end;
    var
     Form1: TForm1;
    implementation
    {$R *.dfm}
    { TMyClass }
    function TMyClass.GetName: string;
    begin
     Result := FName;
    end;
    procedure TMyClass.SetName(val: string);
    begin
     FName := val;
    end;

    { TForm1 }
    procedure TForm1.Button1Click(Sender: TObject);
    var
     c: TMyClass;
     i: IMyInterface;
    begin
     c := TMyClass.Create;
     i := c;
     i.Name := 'ABC';
     ShowMessage(i.Name); {ABC}
     //没有一个 c.Name 存在, 这个属性只属于接口
    end;
    end.

  • 相关阅读:
    编译和和运行amor
    用好C语言的中库,系统错误的处理
    C语言中的宏
    时隔多年,再次实现的链表
    脚本更改桌面背景
    python爬虫 一个security的RSA加密爬虫
    mysql 8.0版本
    mysql5.7的并行复制
    kinshard中间件问题
    Springboot2-@Transactional 事务不生效
  • 原文地址:https://www.cnblogs.com/aipeli/p/1767231.html
Copyright © 2011-2022 走看看