是否可以有两个同名的属性?
property Cell [Cl, Rw: Integer]: string read getCell write setCell;
property Cell [ColName: string; Rw: Integer]: string read getCellByCol write setCellByCol;
嗯,我试过了,编译器不会让我这么做,但也许有一个技巧......?
答案 0 :(得分:27)
不 - 但是又一次:是......排序......
function getP1(Cl,Rw : integer) : string;
procedure setP1(C1,Rw : integer ; const s : string);
function getP2(const Cl : string ; Rw : integer) : string;
procedure setP2(const C1 : string ; Rw : integer ; const s : string);
property P1[Cl,Rw : integer] : string read getP1 write setP1; default;
property P1[const Cl : string ; Rw : integer] : string read getP2 write setP2; default;
诀窍是将属性命名为相同,并使用“default”子句标记它们。然后,您可以使用各种参数访问相同的属性名称:
P1['k',1]:=P1[2,1];
P1[2,1]:=P1['k',1];
编译得很好。不知道这是否得到了官方支持,或者是否存在其他一些问题,但是它编译得很好并且调用了正确的getter / setter(在Delphi 2010中测试过)。 / p>
这当然只有在您尚未使用类的默认属性时才有效,因为我能够使其工作的唯一方法是使用默认子句。