| 
| 
 | Вопрос # 4 509/ вопрос открыт / | 
 |  Доброго времени суток, уважаемые эксперты!Кому не трудно, просмотрите мой код и объясните, почему же my.b[2] не принимает значение. Ну или почему выводится неправильное значение...
 Приложение:Переключить в обычный режим unit Unit1; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls; type   TForm1 = class(TForm)    Button1: TButton;    procedure Button1Click(Sender: TObject);  private    { Private declarations }  public    { Public declarations }  end;   TMyClass = class(TObject)     procedure SetB(Index : integer; NewValue : integer);    function GetB(Index : integer) : integer;    property b[Index : integer] : integer read GetB write SetB;   end; var  Form1: TForm1;  My : TMyClass; implementation {$R *.dfm} { TMyClass } function TMyClass.GetB(Index: integer): integer;beginend; procedure TMyClass.SetB(Index, NewValue: integer);beginend; procedure TForm1.Button1Click(Sender: TObject);   begin     My := TmyClass.Create;    My.b[2] := 20;    showmessage(inttostr(my.b[1]));    showmessage(inttostr(my.b[2]));    My.Free;   end; end. 
|  |   Вопрос задал: padonak (статус: Посетитель)Вопрос отправлен: 17 августа 2010, 18:36
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Вадим К Здравствуйте, padonak!Ну потому что property b[Index : integer]  это не массив. и как обрабатывать индексы, нужно решить самому.
 я вижу заготовки методов
 
 // этот метод получает индекс и должен возвратить значение элемента
function TMyClass.GetB(Index: integer): integer;
begin
end;
// этот получает индекс и должен как то сохранить.
procedure TMyClass.SetB(Index, NewValue: integer);
begin
end; Если припустить, что в private части у нас объявлено
 field:array[1..100] of integer;
 тогда эти методы можно реализовать так
 
 // этот метод получает индекс и должен возвратить значение элемента
function TMyClass.GetB(Index: integer): integer;
begin
if (index < 1) or (index > 100)
 then result := -1 //мы за пределами
else
  result := field[index];
end;
// этот получает индекс и должен как то сохранить.
procedure TMyClass.SetB(Index, NewValue: integer);
begin
if  (index >= 1) and (index <= 100) then 
  field[index] := NewValue;
 
end; Конечно, в коде все это делается обычно посложнее. Можно считать что это не "массив", а такая себе функция с параметром индекс:)
 
|  | Ответ отправил: Вадим К (статус: Академик)Время отправки: 17 августа 2010, 18:55
 Оценка за ответ: 5
 Комментарий к оценке: Спс. Я то думал что b[Index : integer] уже как массив, а ннет... |  
 Мини-форум вопросаМини-форум пуст. Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |