Возможно ли иметь два свойства с тем же именем?

Возможно ли иметь два свойства с тем же именем?

property  Cell [Cl, Rw: Integer]: string   read getCell  write setCell;
property  Cell [ColName: string; Rw: Integer]: string read getCellByCol write setCellByCol;

Ну, я попробовал, и компилятор не позволит мне это сделать, но, может быть, есть трюк...?

Ответ 1

Нет - но опять же: Да... Сортировка...

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;

Хитрость заключается в том, чтобы назвать свойство одинаковым и отметить оба с условием "по умолчанию". Затем вы можете получить доступ к одному и тому же имени свойства с различными параметрами:

P1['k',1]:=P1[2,1];
P1[2,1]:=P1['k',1];

компилирует fine.Don не знаю, поддерживается ли это в автономном режиме или есть какие-то другие проблемы, но он компилируется и вызывает правильный getter/setter (проверен в Delphi 2010).

Это, конечно, работает только в том случае, если вы еще не используете свойство по умолчанию для своего класса, так как единственный способ, которым я смог заставить его работать, - это использовать предложение по умолчанию.