gpt4 book ai didi

delphi - 如何构造一个具有很多属性的对象?

转载 作者:行者123 更新时间:2023-12-03 14:43:08 26 4
gpt4 key购买 nike

我在设计类时遇到了一些麻烦。创建客户类别看起来很简单:

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;
正如你所看到的,我最终得到了一个带有大量参数的构造函数。构造具有大量属性的对象的更好方法是什么?

最佳答案

如果某个类需要有很多字段,我会创建一个仅包含强制参数的构造函数,其余部分将保留在可写属性中:

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 - 如何构造一个具有很多属性的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15251818/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com