![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как создать свойство [D7, NT4]
ita © (2005-04-25 07:03:00)У меня не получается создать свойство. Я создаю очень простой класс:
type
TObj=class
public
procedure SetF1(z:integer);
function GetF1:integer;
property f1:integer read Getf1 write SetF1;
end;
procedure TObj.SetF1(z:integer);
begin
if f1<>z then
begin
f1:=z;
end;
end;
function TObj.GetF1:integer;
begin
Result:=f1;
end;
// создание экземпляра
Obj1:=TObj.Create;
Obj1.f1 :=10;
label1.Caption:=IntToStr(Obj1.f1);
При создании экземпляра зависает на методе GetF1, сообщение - переполнение стека.
Заранее благодарна.
Юрий Зотов (2005-04-25 11:35:00) [1]> ita © (25.04.05 07:03)
procedure TObj.SetF1(z:integer);
begin
if f1<>z then
begin
f1 := z; // Здесь вызывается SetF1 и возникает рекурсия
end;
end;
function TObj.GetF1:integer;
begin
Result := f1; // Здесь вызывается GetF1 и возникает рекурсия
end;
=============================
Если при чтении или присваивании свойства не требуется никаких дополнительные действия то и не нужны никакие
Get/Set. Просто объявите класс так:
TObj = class
private
FF1: integer;
public
property F1: integer read FF1 write FF1;
end;
Если в потомках свойство может быть перенесено в published, то не лишним бы добавить к его объявлению default 0.
MBo (2005-04-25 07:10:00) [2]TObj=class
private
FF1:Integer;
procedure SetF1(const Value:integer);
function GetF1:integer;
public
property f1:integer read Getf1 write SetF1;
end;
procedure TObj.SetF1(const Value:integer);
begin
if ff1<>Value then
ff1:=Value;
end;
function TObj.GetF1:integer;
begin
Result:=ff1;
end;
Многое из этогоо можно было получить автоматически, лишь написав в редакторе
property f1:integer; и нажать Alt-Ctrl-C