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

Вниз

Приведение и сравнение типов.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.027 c
2-1144762527
Der Nechk@ssoff
2006-04-11 17:35
2006.04.30
Данные из ini


3-1141972736
worldmen
2006-03-10 09:38
2006.04.30
SQL-запрос. 4 таблицы.


2-1144845575
Zloychik
2006-04-12 16:39
2006.04.30
коды ошибок программы


3-1141885514
Елена
2006-03-09 09:25
2006.04.30
Иерархические запросы


15-1144262820
Hover
2006-04-05 22:47
2006.04.30
Программы для PDA