Форум: "Основная";
Текущий архив: 2006.04.30;
Скачать: [xml.tar.bz2];
ВнизПриведение и сравнение типов. Найти похожие ветки
← →
Kolan © (2006-03-25 22:04) [0]Здравствуйте,
(FSettingList[GetSettingIndex(Name)] as TBooleanSetting)
Эта строчка сделает приведение к типуTBooleanSetting
.
А как привести к типу обекта, чей это метод. Те как привести к типуSelf
?
← →
Cash © (2006-03-25 22:20) [1]...А привести ету штукенцию к типу носителя можно так:
- подобно вашему примеру
(FSettingList[GetSettingIndex(Name)] as Self.ClassType)
- или так, как нравится мне
Self.ClassType(FSettingList[GetSettingIndex(Name)])
Всеравно приведется.
← →
Kolan © (2006-03-25 22:31) [2]Это я нашел, но..
Допустим класс выглядитTBooleanSetting
так:TBooleanSetting = class(TCustomSetting)
property DefaultValue : Boolean read GetDefaultValue write SetDefaultValue;
end;
Если пишу так то компилятор говорит, что мон неопределенный идентификаторDefaultValue
DefaultValue
:= (FSettingList[GetSettingIndex(Name)] as Self.ClassType).DefaultValue;
...
← →
Cash © (2006-03-25 22:40) [3]Интересно.... 8)
DefaultValue := (FSettingList[GetSettingIndex(Name)] as Self.ClassType).DefaultValue;
А та фича, окошко со списком полей и методов, после этой точки
появляется млм нет?
← →
Kolan © (2006-03-25 22:48) [4]Яное дело окошко(CodeInsight)появляется, но DefaultValue там нет.
Можно былобы написать функцию возвращающую конкретный тип, но как это сделать не пойму...
Как вообще вернуть Тип?
← →
Kolan © (2006-03-25 22:51) [5]Кстати:
Avoid using ClassType in application code.
Note:
In Delphi code, use the is or as operators instead of ClassType.
← →
Cash © (2006-03-25 22:58) [6]... Как вообще вернуть Тип? ...
Говорим, что у нас есть TBooleanSetting.
И, что он наследник от TCustomSetting. Так?
Далее можно сказать, что у нас есть еще что ни то
потомственное от TBooleanSetting. Но ведь в то же время
этот потомок будет еще и потомком от TCustomSetting!
Тогда все дело должно свернуться к универсализации класса
TCustomSetting. Это делается так:
Type
TSettingClass = class of TCustomSetting;
После чего просто делаешь функцию или еще чего и прикручиваешь
этот TSettingClass туда.
Я так до конца и не понял, чего тебе надо от DefaultValue?
Сможешь пояснить?
← →
Kolan © (2006-03-26 10:50) [7]Сможешь пояснить?
Да, я хочу создать универсальный менеджер настроек, но это как я понял невозмлжно, тк действия, проверки итд для разных типов нужны разные. Особенно если ти - запись.
Так вот я создал иерархию "Настроек" - наследниковTCustomSetting
у них у всех есть два свойстваValue
иDefalutValue
;
А, блин, кстатиSelf
у меня это был неTBooleanSetting
, аTBooleanSettingList
, который содержит списокTBooleanSetting
.
Но такое тоже не работает,
DefaultValue
:= (FSettingList[GetSettingIndex(Name)] as FSettingList[0].ClassType).DefaultValue;
потому чтоTClass
не знает о моих свойствах.
И соответственно по классу - "списку настроек" для каждого типа.
И еще менеджер, который всем заправляет. Работет все, но если писать
везде(FSettingList[GetSettingIndex(Name)] as TBooleanSetting)
, то придется менять приведение в каждом типе настроек.
...
← →
Kolan © (2006-03-26 10:56) [8]Незнаю что я сделал...
Сделал такие ф-цииfunction GetMyClassName: TBooleanSettingClass; virtual; abstract;
TStringSettingClass = class of TStringSetting;
Компилится - компилится, но не работает...
Лучьше я покопирую... чем такой изврат....
← →
Cash © (2006-03-26 13:17) [9]Kolan © (26.03.06 10:56) [8]:
function GetMyClassName: TBooleanSettingClass; virtual; abstract;
Ты в потомках этот метод переписываешь?
Так... насколько стало ясно, ты используешь иерархию классов для
хранения настроек разных типов. Т. е. твои Value и DefalutValue могут
быть либо string, либо Double или еще чего там. Так?
А тогда зачем тебе Property?
Используй три virtual метода,
первый - для возвращения типа поля,
второй - для возвращения указателя на поле Value,
а третий - указателя на поле DefalutValue.
тем самым тебе ваабще не надо будет класс узнавать!
Причем тип можно возвращать и не непосредственно, т. е., к примеру,
для Byte возвращается 0, а для integer - 1. И исходя из этого значения
уже можно приводить к нужному типу и брать разыменование указателя.
← →
Kolan © (2006-03-26 13:48) [10]Да уже сделал. Думаю этого мне надолго хватит....
первый - для возвращения типа поля,
второй - для возвращения указателя на поле Value,
а третий - указателя на поле DefalutValue.
До этого не додумался...
Благодарю за помощь поробую... :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.04.30;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.024 c