Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как создать свойство [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


Наверх

Титульная страница Поиск, карта сайта Написать письмо