Перекрытие индексированного свойства

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Перекрытие индексированного свойства

Сообщение and » 17.02.2010 22:06:28

Код: Выделить всё
TAncestor=Class
          Private
            Function GetTest(index:integer):integer;
          Public
            property test[index:integer]:integer
              read GetTest;
          End;
TDerived=Class(TAncestor)
         Private
           Procedure SetTest(index,value:integer);
         Public
           property test
             write SetTest;
         End;
Получаю ошибку компиляции "Illegal symbol for property access" на строке "write SetTest;".
Если свойство не индексированное, то добавление метода записи проходит нормально - всё как по учебнику.
Баг? Фича?
FPC 2.4.1.
Аватара пользователя
and
постоялец
 
Сообщения: 124
Зарегистрирован: 16.09.2009 17:11:01
Откуда: г. Гомель, Беларусь

Re: Перекрытие индексированного свойства

Сообщение MageSlayer » 18.02.2010 23:35:58

and писал(а):Если свойство не индексированное, то добавление метода записи проходит нормально - всё как по учебнику.
Баг? Фича?
FPC 2.4.1.


Мдя, месье знает толк в извращениях (с) :)
Так вроде работает:
Код: Выделить всё
type

{ TAncestor }

TAncestor=Class
          Private
            n:integer;
            Function GetTest(index:integer):integer;
          Public
            property test[index:integer]:integer read GetTest;
          End;

{ TDerived }

TDerived=Class(TAncestor)
         Private
           Procedure SetTest(index,value:integer);
         Public
           //property test write SetTest;
           property test[index:integer]:integer read GetTest write SetTest ;
         End;

procedure TDerived.SetTest(index, value: integer);
begin
  n:=value;
end;

{ TAncestor }

function TAncestor.GetTest(index: integer): integer;
begin
  Result:=n;
end;

var D:TDerived;
begin
  D:=TDerived.Create;
  D.test[0]:=111;
  Writeln( D.test[0] );

  D.Free;
end.   


Так что, похоже, на фичу/баг :).
MageSlayer
постоялец
 
Сообщения: 216
Зарегистрирован: 07.09.2006 12:30:44

Re: Перекрытие индексированного свойства

Сообщение and » 20.02.2010 19:45:14

2MageSlayer: При чём тут извращения? Обычное перекрытие свойства для добавления/изменения функциональности.

То, что Вы предлагаете, естественно, работает: ведь Вы _переопределяете_ property. Фактически, заново его описываете.
Попробуйте разнести TDerived и TAncestor по разным модулям - поймёте разницу.

Добавлено спустя 6 часов 11 минут 7 секунд:
Выкопал старенькую Delphi5, чтоб себя проверить: может, забыл чего?.. Нет, всё так, как и ожидалось: перекрытие индексированного свойства ничем не отличается от неиндаксированного.

Скачал snapshot 2.5.1. Ведёт себя так же, как и 2.4.1.

Вывод: имеет место баг. Уважаемые старожилы, создайте plz ветку в багтрекере: я там ещё не настолько освоился, да и с "невеликим и немогучим" у меня хорошо только в плане чтения, собственные мысли на нём формулирую с трудом.
Аватара пользователя
and
постоялец
 
Сообщения: 124
Зарегистрирован: 16.09.2009 17:11:01
Откуда: г. Гомель, Беларусь


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru
cron