Форум: "Основная";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];
ВнизЧтение свойства - всем, запись - только потомкам Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.043 c