Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Aldor ©   (2005-05-29 10:03:00) 

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

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


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


TUser   (2005-05-30 10:40:00) [1]

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


Anatoly Podgoretsky   (2005-05-30 10:28:00) [2]

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


Fay   (2005-05-30 10:18:00) [3]

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


evvcom   (2005-05-30 10:09:00) [4]


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

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


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

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


Anatoly Podgoretsky   (2005-05-30 10:03:00) [5]

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


Fay   (2005-05-30 10:02:00) [6]

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


evvcom   (2005-05-30 09:52:00) [7]


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

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


Marser   (2005-05-29 20:30:00) [8]


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

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


Aldor   (2005-05-29 20:16:00) [9]

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

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


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


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

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


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

> Aldor ©   (29.05.05 10:03)  

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

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


Anatoly Podgoretsky   (2005-05-29 11:25:00) [12]

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


Aldor   (2005-05-29 11:21:00) [13]


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


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


Aldor   (2005-05-29 11:16:00) [14]


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

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


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


Anatoly Podgoretsky   (2005-05-29 11:11:00) [15]

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


AlterEgo of WondeRu   (2005-05-29 10:46:00) [16]

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


Aldor   (2005-05-29 10:32:00) [17]

Marser

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


Alex Konshin   (2005-05-29 10:26:00) [18]

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


Marser   (2005-05-29 10:06:00) [19]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо