Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
6-1137093319
Volf_555
2006-01-12 22:15
2006.04.30
Как сохранить интернет-страницу из TWebBrowser с рисунками?


15-1144410364
syte_ser78
2006-04-07 15:46
2006.04.30
Я пятницей, господа!


2-1144951770
mobwar
2006-04-13 22:09
2006.04.30
Проблема кодировки после Copy Paste


2-1144856527
KLAUS
2006-04-12 19:42
2006.04.30
Memo+Hex


3-1141715751
neat
2006-03-07 10:15
2006.04.30
Обновление грида после Update





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский