Форум: "Начинающим";
Текущий архив: 2009.01.11;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c