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

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

Приведение и сравнение типов. [WinXP]


Kolan ©   (2006-03-25 22:04:00) 

Здравствуйте,
  (FSettingList[GetSettingIndex(Name)] as TBooleanSetting)
Эта строчка сделает приведение к типу TBooleanSetting.

А как привести к типу обекта, чей это метод. Те как привести к типу Self?


Kolan   (2006-03-26 13:48:00) [1]

Да уже сделал. Думаю этого мне надолго хватит....

первый - для возвращения типа поля,
второй - для возвращения указателя на поле Value,
а третий - указателя на поле DefalutValue.


До этого не додумался...
Благодарю за помощь поробую... :)


Cash   (2006-03-26 13:17:00) [2]

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 10:56:00) [3]

Незнаю что я сделал...
Сделал такие ф-ции
function GetMyClassName: TBooleanSettingClass; virtual; abstract;

TStringSettingClass = class of TStringSetting;

Компилится - компилится, но не работает...

Лучьше я покопирую... чем такой изврат....


Kolan   (2006-03-26 10:50:00) [4]

Сможешь пояснить?
Да, я хочу создать универсальный менеджер настроек, но это как я понял невозмлжно, тк действия, проверки итд для разных типов нужны разные. Особенно если ти - запись.

Так вот я создал иерархию "Настроек" - наследников TCustomSettingу них у всех есть два свойства Valueи DefalutValue;

А, блин, кстати Selfу меня это был не TBooleanSetting, а TBooleanSettingList, который содержит список TBooleanSetting.
Но такое тоже не работает

DefaultValue
   := (FSettingList[GetSettingIndex(Name)] as FSettingList[0].ClassType).DefaultValue;
,
потому что TClassне знает о моих свойствах.


И соответственно по классу - "списку настроек"  для каждого типа.

И еще менеджер, который всем заправляет. Работет все, но если писать
везде
(FSettingList[GetSettingIndex(Name)] as TBooleanSetting)

, то придется менять приведение в каждом типе настроек.

...


Cash   (2006-03-25 22:58:00) [5]

... Как вообще вернуть Тип? ...

Говорим, что у нас есть TBooleanSetting.
И, что он наследник от TCustomSetting. Так?

Далее можно сказать, что у нас есть еще что ни то
потомственное от TBooleanSetting. Но ведь в то же время
этот потомок будет еще и потомком от TCustomSetting!
Тогда все дело должно свернуться к универсализации класса
TCustomSetting. Это делается так:

Type
  TSettingClass = class of TCustomSetting;


После чего просто делаешь функцию или еще чего и прикручиваешь
этот TSettingClass туда.

Я так до конца и не понял, чего тебе надо от DefaultValue?
Сможешь пояснить?


Kolan   (2006-03-25 22:51:00) [6]

Кстати:

Avoid using ClassType in application code.
Note:
In Delphi code, use the isor asoperators instead of ClassType.


Kolan   (2006-03-25 22:48:00) [7]

Яное дело окошко(CodeInsight)появляется, но DefaultValue там нет.

Можно былобы написать функцию возвращающую конкретный тип, но как это сделать не пойму...

Как вообще вернуть Тип?


Cash   (2006-03-25 22:40:00) [8]

Интересно.... 8)
DefaultValue := (FSettingList[GetSettingIndex(Name)] as Self.ClassType) . DefaultValue;
А та фича, окошко со списком полей и методов, после этой точки
появляется млм нет?


Kolan   (2006-03-25 22:31:00) [9]

Это я нашел, но..

Допустим класс выглядит 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:20:00) [10]

...А привести ету штукенцию к типу носителя можно так:
- подобно вашему примеру
 (FSettingList[GetSettingIndex(Name)] as Self.ClassType)

- или так, как нравится мне
 Self.ClassType(FSettingList[GetSettingIndex(Name)])

Всеравно приведется.


Наверх

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