Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.04;
Скачать: CL | DM;

Вниз

Как создать свойство   Найти похожие ветки 

 
ita ©   (2005-04-25 07:03) [0]

У меня не получается создать свойство. Я создаю очень простой класс:
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, сообщение - переполнение стека.
  Заранее благодарна.


 
MBo ©   (2005-04-25 07:10) [1]

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


 
Юрий Зотов ©   (2005-04-25 11:35) [2]

> 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.



Страницы: 1 вся ветка

Текущий архив: 2005.12.04;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.025 c
1-1131437781
Рафик
2005-11-08 11:16
2005.12.04
Как мне создать отчет из базы в ворде


2-1132140756
MitjaT
2005-11-16 14:32
2005.12.04
Глюки при крупном размере экрана


4-1127833308
фывыч
2005-09-27 19:01
2005.12.04
о tprocessentry32


2-1132236530
DelphiLexx
2005-11-17 17:08
2005.12.04
14pt и пикселы


2-1132068213
PAI
2005-11-15 18:23
2005.12.04
Довольно большая программа понемногу, но "подъедает" память.