引用一个普通的setter in 属性 write
Reference a common setter in property write
我可以在属性的 write
访问器中引用一个常见的 setter _setTerm
而无需编写单独的 setter 方法 _setTerm1
, _setTerm2
, _setTerm3
?
TAdder = class(TCalculatorComponent)
private
_terms: array[1..10] of OleVariant;
procedure _setTerm(const i: Integer; const Value: OleVariant);
procedure _setTerm1(const Value: OleVariant);
procedure _setTerm2(const Value: OleVariant);
procedure _setTerm3(const Value: OleVariant);
.......
public
constructor Create(AOwner: TComponent); override;
property Term1: OleVariant read _terms[1] write _setTerm1;
property Term2: OleVariant read _terms[2] write _setTerm2;
property Term3: OleVariant read _terms[3] write _setTerm3;
.......
end;
implementation
procedure TAdder._setTerm(const i: Integer; const Value: OleVariant);
begin
_terms[i] := TVarConv.NullableFloat(Value);
_calculate();
end;
procedure TAdder._setTerm1(const Value: OleVariant);
begin
_setTerm(1, Value);
end;
procedure TAdder._setTerm2(const Value: OleVariant);
begin
_setTerm(2, Value);
end;
procedure TAdder._setTerm3(const Value: OleVariant);
begin
_setTerm(3, Value);
end;
解决方案 #1
type
TAdder = class
private
_terms: array[1..10] of OleVariant;
procedure _setTerm(const i: Integer; const Value: OleVariant);
function _getTerm(const Index: Integer): OleVariant;
public
property Term1: OleVariant index 1 read _getTerm write _SetTerm;
property Term2: OleVariant index 2 read _getTerm write _SetTerm;
property Term3: OleVariant index 3 read _getTerm write _SetTerm;
end;
function TAdder._getTerm(const Index: Integer): OleVariant;
begin
Result := _terms[i];
end;
procedure TAdder._setTerm(const i: Integer; const Value: OleVariant);
begin
_terms[i] := TVarConv.NullableFloat(Value);
_calculate();
end;
解决方案 #2
type
TAdder = class
private
_terms: array[1..10] of OleVariant;
procedure _setTerm(i: Integer; const Value: OleVariant);
function _getTerm(Index: Integer): OleVariant;
public
property Terms[aIndex: Integer]: OleVariant read _getTerm write _SetTerm;
end;
function TAdder._getTerm(Index: Integer): OleVariant;
begin
Result := _terms[Index];
end;
procedure TAdder._setTerm(i: Integer; const Value: OleVariant);
begin
_terms[i] := TVarConv.NullableFloat(Value);
_calculate();
end;
您可能想检查 i 是否超出 _SetTerm 和 _GetTerm 的范围
我可以在属性的 write
访问器中引用一个常见的 setter _setTerm
而无需编写单独的 setter 方法 _setTerm1
, _setTerm2
, _setTerm3
?
TAdder = class(TCalculatorComponent)
private
_terms: array[1..10] of OleVariant;
procedure _setTerm(const i: Integer; const Value: OleVariant);
procedure _setTerm1(const Value: OleVariant);
procedure _setTerm2(const Value: OleVariant);
procedure _setTerm3(const Value: OleVariant);
.......
public
constructor Create(AOwner: TComponent); override;
property Term1: OleVariant read _terms[1] write _setTerm1;
property Term2: OleVariant read _terms[2] write _setTerm2;
property Term3: OleVariant read _terms[3] write _setTerm3;
.......
end;
implementation
procedure TAdder._setTerm(const i: Integer; const Value: OleVariant);
begin
_terms[i] := TVarConv.NullableFloat(Value);
_calculate();
end;
procedure TAdder._setTerm1(const Value: OleVariant);
begin
_setTerm(1, Value);
end;
procedure TAdder._setTerm2(const Value: OleVariant);
begin
_setTerm(2, Value);
end;
procedure TAdder._setTerm3(const Value: OleVariant);
begin
_setTerm(3, Value);
end;
解决方案 #1
type
TAdder = class
private
_terms: array[1..10] of OleVariant;
procedure _setTerm(const i: Integer; const Value: OleVariant);
function _getTerm(const Index: Integer): OleVariant;
public
property Term1: OleVariant index 1 read _getTerm write _SetTerm;
property Term2: OleVariant index 2 read _getTerm write _SetTerm;
property Term3: OleVariant index 3 read _getTerm write _SetTerm;
end;
function TAdder._getTerm(const Index: Integer): OleVariant;
begin
Result := _terms[i];
end;
procedure TAdder._setTerm(const i: Integer; const Value: OleVariant);
begin
_terms[i] := TVarConv.NullableFloat(Value);
_calculate();
end;
解决方案 #2
type
TAdder = class
private
_terms: array[1..10] of OleVariant;
procedure _setTerm(i: Integer; const Value: OleVariant);
function _getTerm(Index: Integer): OleVariant;
public
property Terms[aIndex: Integer]: OleVariant read _getTerm write _SetTerm;
end;
function TAdder._getTerm(Index: Integer): OleVariant;
begin
Result := _terms[Index];
end;
procedure TAdder._setTerm(i: Integer; const Value: OleVariant);
begin
_terms[i] := TVarConv.NullableFloat(Value);
_calculate();
end;
您可能想检查 i 是否超出 _SetTerm 和 _GetTerm 的范围