|
Вопрос # 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;
- begin
- end;
-
- procedure TMyClass.SetB(Index, NewValue: integer);
- begin
- end;
-
- 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] уже как массив, а ннет...
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|