Главная страница
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.017 c
4-1203943522
Gool
2008-02-25 15:45
2009.01.11
WIN API


15-1226588778
antonn
2008-11-13 18:06
2009.01.11
нужен jpeg.pas


15-1226981467
Slider007
2008-11-18 07:11
2009.01.11
С днем рождения ! 18 ноября 2008 вторник


2-1227773282
kate158
2008-11-27 11:08
2009.01.11
расчет медианы набора данных


15-1226741443
timekiller
2008-11-15 12:30
2009.01.11
Мобильная Delphi