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

Вниз

property   Найти похожие ветки 

 
9899100   (2008-11-26 10:39) [0]

Описал класс
TStore=class
 Private
   fHeader:THeader;
 ...
 Public
   property Header:THeader read fHeader write fHeader;
  ...
 end;

здесь THeader=record
          name:String;
          count:Integer;
       end;

Когда пытаюсь присвоить значение

q1.Header.Count:=100;

компилятор выдает ошибку что
Left side cannot be assigned to

в принципе понятно почему такая ошибка возникает

вопрос  в том, как можно сделать чтобы можно было присваивать значения полям свойства fHeader но не напрямую т.е. не перенося fHeader
в секцию Public
????


 
Palladin ©   (2008-11-26 10:43) [1]

PHeader=^THeader;
THeader=record
         name:String;
         count:Integer;
      end;

TStore=class
Private
  fHeader:THeader;

function gHeader:PHeader;
...
Public
  property Header:PHeader read gHeader;
 ...
end;

function gHeader:PHeader;
result:=@fHeader


 
Сергей М. ©   (2008-11-26 10:43) [2]


> свойства fHeader


Нет у тебя такого свойства.
Есть св-во Header.


 
9899100   (2008-11-26 10:52) [3]

>>Paladin
интересный вариант
тогда получиться
обращение типа

q1.Header^.Count:=100;

а так чтобы нормально работало при
q1.Header.Count:=100;
учитывая что fHeader в секции private
не получиться???


 
Ega23 ©   (2008-11-26 10:53) [4]


> а так чтобы нормально работало при
> q1.Header.Count:=100;
> учитывая что fHeader в секции private
> не получиться???


А ты попробуй.


 
MBo ©   (2008-11-26 10:54) [5]

или присваивать свойство-запись целиком, или делать доступ к полям записи через отдельные свойства


 
Palladin ©   (2008-11-26 10:55) [6]


> 9899100   (26.11.08 10:52) [3]

да... интересный вариант твоих комментариев :) сразу видно, дело знаешь :)


 
9899100   (2008-11-26 10:59) [7]

>>Paladin
не прикалывайся
ведь вариантов реализации может быть довольно много
ты предложил довольно интересный


 
Сергей М. ©   (2008-11-26 11:03) [8]


> 9899100


В какой секции объявлено свойство - по барабану . Секция влияет лишь на область видимости ид-ра.

А вот что объявлено - свойство или поле - это совсем другой вопрос.
Свойство, в отлисии от поля, позволяет использовать методы-геттеры/сеттеры, в которых ты волен реализовать требуемую логику записи/чтения.


 
Palladin ©   (2008-11-26 11:08) [9]


> 9899100   (26.11.08 10:59) [7]

да это ты прикалываешься, несешь вскую шутки... )


> ведь вариантов реализации может быть довольно много

реализации чего? хочешь менять поля не отходя от кассы используй указатели (не сможешь поймать момен изменения, грубо говоря сеттер не напишешь для этого дела), или превращай запись в класс, если нужно реагировать на изменения полей, кстати, по последним данным, в последних версиях делфи свойства можно делать и в записях


 
9899100   (2008-11-26 11:17) [10]

>>Сергей

> В какой секции объявлено свойство - по барабану . Секция
> влияет лишь на область видимости ид-ра.
>
> А вот что объявлено - свойство или поле - это совсем другой
> вопрос.
> Свойство, в отлисии от поля, позволяет использовать методы-
> геттеры/сеттеры, в которых ты волен реализовать требуемую
> логику записи/чтения.


от и яж про тоже


 
9899100   (2008-11-26 11:21) [11]

>>Palladin
спасибо
действительно работает без разадресации указателя
q1.Header.Count:=100;

блин я всегда их разадресовывал указатели
т.е. если указанно что i:^Integer
то обязательно
i^:=10;
но ни как не i:=10
ибо i это указатель
......


 
Сергей М. ©   (2008-11-26 11:37) [12]


> от и яж про тоже


Ну так а что же тогда медлишь ?)

Объявляй

property Header:THeader read FHeader write SetHeader;

и вуаля !

В сеттере делай все что надо с полем fHeader


 
Anatoly Podgoretsky ©   (2008-11-26 12:32) [13]


> 9899100   (26.11.08 10:52) [3]

Получится, если создашь свойство Count


 
Sapersky   (2008-11-26 13:04) [14]

With q1.Header do Count:=100;

или

property HeaderCount : Integer read fHeader.Count write fHeader.Count;

блин я всегда их разадресовывал указатели

Если это указатель на запись или массив, то при обращении к полям (или элементам массива) разадресация делается автоматически.



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

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

Наверх




Память: 0.5 MB
Время: 0.009 c
2-1227704235
ekto
2008-11-26 15:57
2009.01.11
не работают сплиттеры


2-1228065719
Аврам
2008-11-30 20:21
2009.01.11
проблемы с алгоритмом


2-1228034039
Шурик
2008-11-30 11:33
2009.01.11
Нужно исправить код


15-1226659411
sefon
2008-11-14 13:43
2009.01.11
У кого есть подшивка журнала Моделист-Конструктор ?


1-1205742601
Thrasher
2008-03-17 11:30
2009.01.11
Word и Delphi