Главная страница
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.087 c
10-1108091214
TheDog
2005-02-11 06:06
2005.12.04
Что это должно быть?


2-1132304755
cherman
2005-11-18 12:05
2005.12.04
qReport


3-1129707692
DancerMan
2005-10-19 11:41
2005.12.04
Выполнить действие, если курсор находится на записи более 1сек.


14-1131887831
Неважно
2005-11-13 16:17
2005.12.04
Программа для измерения громкости звука


2-1132036538
КиТаЯц
2005-11-15 09:35
2005.12.04
Отображение даты