Главная страница
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.028 c
3-1141656216
mvs
2006-03-06 17:43
2006.04.30
Экспорт данных из базы Interbase в скрипт средствами Delphi


15-1144504394
OSokin
2006-04-08 17:53
2006.04.30
Кто любит игру "Корсары"?


2-1145038924
R2D2
2006-04-14 22:22
2006.04.30
Алгоритм Диффи-Хелмана


15-1144570984
Ega23
2006-04-09 12:23
2006.04.30
С Днём рождения! 8 апреля


15-1144293995
Rentgen
2006-04-06 07:26
2006.04.30
какой коэффициент счетчика, если известны Ктт и Ктн ???