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

Вниз

Чтение свойства - всем, запись - только потомкам   Найти похожие ветки 

 
Aldor ©   (2005-05-29 10:03) [0]

т.е. сделать что-то типа такого:

TMyClass = class
protected
  property Some: TSomeType write SetSome
public
  property Some: TSomeType read GetSome


 Что обычно делают в таком случае? Просто добавить в protected метод SetXXX - теряется удобство пользования свойствами.


 
Marser ©   (2005-05-29 10:06) [1]

В методах write делать проверку на "родство". Не потомок - налево. Можно с exception.


 
Alex Konshin ©   (2005-05-29 10:26) [2]

На родство кого к кому? Подумай.


 
Aldor ©   (2005-05-29 10:32) [3]

Marser

 Имеещь в виду проверять self? А смысл? Вызвать-то метод может кто угодно, не вводить же Sender: TObject.


 
AlterEgo of WondeRu ©   (2005-05-29 10:46) [4]

сделай SetSome виртуальным... в предке оставь метод пустым, а в потомке сделай реализацию... Даже если в предке будут чего-нить писать, все равно будет выполняться пустой метод


 
Anatoly Podgoretsky ©   (2005-05-29 11:11) [5]

Зачем тебе именно одинаковые имена.


 
Aldor ©   (2005-05-29 11:16) [6]


AlterEgo of WondeRu ©   (29.05.05 10:46) [4]

сделай SetSome виртуальным... в предке оставь метод пустым, а в потомке сделай реализацию... Даже если в предке будут чего-нить писать, все равно будет выполняться пустой метод


 Так все равно же при позднем связыании вызов метода приведет к вызову метода потомка. Тем более важно, чтобы "снаружи" не было даже "видно" метода изменения поля.
 Дело ведь не в том, чтобы предок не мог изменить свойство, а чтобы можно было изменять свойство только внутри методов класса, а не "снаружи".


 
Aldor ©   (2005-05-29 11:21) [7]


Anatoly Podgoretsky ©   (29.05.05 11:11) [5]
Зачем тебе именно одинаковые имена.


 Some := Some + 1, например.
 Идея Ваша, конечно, хорошая, только вот не могу придумать названия для свойства-дубликата, чтобы это было корректно и понятно читающему.


 
Anatoly Podgoretsky ©   (2005-05-29 11:25) [8]

ReadProp и WriteProp
У тебя по постановке по сути два свойства.


 
Юрий Зотов ©   (2005-05-29 15:24) [9]

> Aldor ©   (29.05.05 10:03)  

Вот простейший вариант:

type
 TMyClass = class
 protected
   procedure SetSome(Value: ...);
 public
   function Some: ...;
 end;


 
Marser ©   (2005-05-29 16:05) [10]


> Юрий Зотов ©   (29.05.05 15:24) [9]

В [0] такой вариант отвергается.


 
Aldor ©   (2005-05-29 20:16) [11]

Да, видимо придется оставить процедуру setter"а, все равно "удобство пользования свойствами" теряется.
 Просто думал, что можно осуществить то, что я написал в [7]. Ну да ладно.

P.S. Сорри за сумбурность последнего поста - толкко что после автоаварии, блин. Живой, все ок :)


 
Marser ©   (2005-05-29 20:30) [12]


> Aldor ©   (29.05.05 20:16) [11]

Да, блин... И Knight на днях попал...


 
evvcom ©   (2005-05-30 09:52) [13]


> Some := Some + 1, например.

Это оптимальнее заменить на Inc(FSome) без потери "удобства"


 
Fay ©   (2005-05-30 10:02) [14]

evvcom ©   (30.05.05 9:52) [13]
Inc с пропертёй не пашет. Это называется "без потери "удобства"" ?


 
Anatoly Podgoretsky ©   (2005-05-30 10:03) [15]

evvcom ©   (30.05.05 09:52) [13]
Вопрос спорный, в большинстве случаев будет одинаковый код, кроме тех случаев, когда компилятор обругает за недопустимость данной операции, а вот насчет наглядности можно подискутировать. И конструкция X := X + 1; будет работать на гораздо большем количестве типов, в отличии от INC.


 
evvcom ©   (2005-05-30 10:09) [16]


> Inc с пропертёй не пашет.

Естественно. А я и написал Inc(FSome).


> будет работать на гораздо большем количестве типов, в отличии
> от INC.

Ну вобщем да. Но учитывая, как написал автор (Some := Some + 1), с большинством таких типов работать будет.


 
Fay ©   (2005-05-30 10:18) [17]

evvcom ©   (30.05.05 10:09) [16]
Sorry 8)


 
Anatoly Podgoretsky ©   (2005-05-30 10:28) [18]

evvcom ©   (30.05.05 10:09) [16]
Вообще то он не написал, какого типа у него свойство/поле. Во вторых то, что он написал противоречит его постановке!
Ну а в третьих надо делать именно так как ты написал, работать именно с FSome


 
TUser ©   (2005-05-30 10:40) [19]

Написать protected метод, который умеет присваивать занчение.



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

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

Наверх




Память: 0.51 MB
Время: 0.05 c
1-1117003474
Ji
2005-05-25 10:44
2005.06.14
Запуск процедуры при загрузке dll


14-1116861462
Ломброзо
2005-05-23 19:17
2005.06.14
ГОСТ 21552-84


1-1117530290
Karlson
2005-05-31 13:04
2005.06.14
Как средствами Delphi создать Help-файл?


8-1109168540
Fenik
2005-02-23 17:22
2005.06.14
Аппроксимация экспериментальных данных.


1-1116939128
Новичек
2005-05-24 16:52
2005.06.14
Приоритет потока.