• (6)类的属性 property (1)


    unit Unit1;

    interface

    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    //父类
      TMyForm = class
        private
          Name : String;
          Age : Integer;
        protected
          procedure SetName(str : String);
          function GetName : string;
          procedure SetAge(AAge : Integer);
          function GetAge : Integer;
        

      //读写属性,用property声明这是一个属性,然后是属性名,类型,读取形式(可以是类成员,也可以是方法),写入形式(可以是类成员,也可以是方法)

          property FName : string read  GetName write SetName;   //读取写入都是方法
          property FAge : Integer read GetAge write SetAge;       //同上

      end;

    //子类 

    MyForm = class(TMyForm)

      end;

    var
      Form1: TForm1;


    implementation

    {$R *.dfm}




    { TMyForm }

    function TMyForm.GetAge: Integer;
    begin
      Result := Age;
    end;

    function TMyForm.GetName: string;
    begin
      Result := Name;
    end;

    procedure TMyForm.SetAge(AAge: Integer);
    begin
      Age := AAge;
    end;

    procedure TMyForm.SetName(str: String);
    begin
      Name := Str;
    end;

    //子类 ,子类已经继承了父类的所有方法与属性。
    procedure TForm1.Button1Click(Sender: TObject);
    var
        MyForm1 : MyForm;
    begin
      MyForm1 := MyForm.Create;
      MyForm1.FName := 'Tony';
      MyForm1.FAge := 19;
      ShowMessage('姓名:' + MyForm1.FName + #13 + '年龄:' + IntToStr(MyForm1.FAge));
      MyForm1.Free;
    end;

    //父类
    procedure TForm1.FormCreate(Sender: TObject);
    var
      My : TMyForm;
    begin
      My := TMyForm.Create;
      My.FName := '123';  //设置姓名属性的参数为123
      My.FAge := 18;       //设置年龄属性的参数为18
      ShowMessage('姓名:' + My.FName + #13 + '年龄:' + IntToStr(My.FAge));
      My.Free;
    end;

    end.

     

      使用属性需要主要的有以下几点 :

                                               1. 读取与写入的方法的返回值类型或者数据成员的类型必须与属性名的类型一致。

                                               2.如果子类与父类在不同的PAS文件中,子类想使用父类的属性,那么父类属性的数据成员必须是可见的(即至少要为protected,不能是private),如果是方法,方法不允许重载。

                                               3.在属性的读取方式中如果后面是一个方法,那么一般为无参数方法,并且返回值与属性相同。

                                               4.在属性的写入方式中如果后面是一个方法,那么一般为过程,这个过程应该有一个参数,参数类型也要与属性类型相同。

  • 相关阅读:
    HTML5 GAME TUTORIAL(三): Draw shapes, paths and text(译)
    HTML5 GAME TUTORIAL(二): Set-up an HTML5 canvas(译)
    HTML5 GAME TUTORIAL(一): Develop an HTML5 game(译)
    实现一个扇形的几种方法
    What Is Webpack and How Does It Work(译)
    What Does Webpack Do, and How Do I Use It for My Website?(译)
    Getting Started with NestJS(译)
    vue 渲染出来的列表点击的时候需要单独给li添加一个class
    移动端使用isscroll.js input无法获取焦点(就是点了没反应啦!)
    移动端适配之rem 笔记
  • 原文地址:https://www.cnblogs.com/mdnx/p/2575199.html
Copyright © 2020-2023  润新知