Delphi   发布时间:2022-04-11  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了delphi – 如何构造一个具有很多属性的对象?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在设计课堂时遇到麻烦.
创建客户类看起来很简单:
TCustomer = Class
  private
    FIdnumber: String;
    FName: String;
    procedure SetName(const Value: String);
    procedure Setnumber(const Value: String);
  public
    Property Name : String read FName;
    Property Idnumber : String read FIdnumber;
    Constructor Create(number,Name  : String);
end;

constructor TCustomer.Create(Anumber,AName: String);
begin
   SetName(AName);
   Setnumber(Anumber);
end;

MyCustomer := TCustomer.Create('1','John Doe');

但是,我的客户有更多的财产:他住在哪里,出生日期等等.

TCustomer = Class
  private
    {..snip snip..}
  public
    Property Name : String read FName;
    Property Idnumber : String read FIdnumber;
    Property Street : String read FStreet;
    Property Housenumber : Integer : read FHousenumber;
    ..
    ..
    ..
    Constructor Create(number,Name,Street : String; Housenumber : Integer .. .. ..);
end;

正如你所看到的,我最终得到一个有很多参数的构造函数.什么是构建具有大量属性的对象的更好方法?

@H_616_12@解决方法
如果某个类需要有很多字段,那么我将使用一个只有强制参数的构造函数,其余的将保留在可写属性中:
type
  TCustomer = class
  private
    FName: String;
    FIdnumber: String;
    FStreet: String;
    FHousenumber: Integer;
  public
    // constructor is empty or just with mandatory parameters
    constructor Create;
    // properties are writeable
    property Name: String read FName write FName;
    property Idnumber: String read FIdnumber write FIdnumber;
    property Street: String read FStreet write FStreet;
    property Housenumber: Integer read FHousenumber write FHousenumber;
  end;

这当然取决于,如果可以将这些属性公开为可写,但在我的观点中,使用情况比具有许多参数的构造函数更好:

var
  Customer: TCustomer;
begin
  Customer := TCustomer.Create;
  Customer.Name := 'Name';
  Customer.Idnumber := 'id number';
  Customer.Street := 'Street';
  Customer.Housenumber := 12345;
end;

大佬总结

以上是大佬教程为你收集整理的delphi – 如何构造一个具有很多属性的对象?全部内容,希望文章能够帮你解决delphi – 如何构造一个具有很多属性的对象?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。