Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2009.01.25;
Скачать: [xml.tar.bz2];

Вниз

Как узнать тип типа класса...   Найти похожие ветки 

 
Jolik ©   (2008-04-06 19:12) [0]

Есть такой код:

type
 TMyClass = class;
 end;

 TMyClassRef = class of TMyClass;


если создать класс типа  TMyClass то я могу использовать оператор is


MyClass := TMyClass.Create();

...

if MyClass is TMyClass then ...;


А есть ли возможность в Дельфи узнать на какой класс указывает сслыка на класс?
Т.е что-то типа

if MyClassRef is TMyClass then ...;


Заранее благодарен!


 
Palladin ©   (2008-04-06 19:22) [1]


> если создать класс типа  TMyClass то я могу использовать
> оператор is

а что мешает? можешь конечно


> А есть ли возможность в Дельфи узнать на какой класс указывает
> сслыка на класс?
> Т.е что-то типа
>
> if MyClassRef is TMyClass then ...;

Нет

опиши задачу подробней.


 
{RASkov} ©   (2008-04-06 19:24) [2]

> [0] Jolik ©   (06.04.08 19:12)
> if MyClassRef is TMyClass then ...;

if MyClassRef = TMyClass then ...;
?


 
Palladin ©   (2008-04-06 19:33) [3]


> {RASkov} ©   (06.04.08 19:24) [2]

ну ща... :) а наследники? еслив было все так просто...


 
Palladin ©   (2008-04-06 19:35) [4]

хотя общая задача неясна... может ему как раз это и нужно...


 
Jolik ©   (2008-04-06 20:02) [5]

Дельфи на if MyClassRef is TMyClass then ...; ругается.
В общемто и правильно - я так понимаю is работает на RTTI а пока объект не создашь - RTTI нету.
Мне надо знать - является ли MyClassRef ссылкой на TMyClass или одного из его потомков (наследников)?
У меня есть список ссылок на класс и хотелось бы среди них выделить ссылки на TMyClass или его потомков.


 
{RASkov} ©   (2008-04-06 20:13) [6]

> [5] Jolik ©   (06.04.08 20:02)
> В общемто и правильно - я так понимаю is работает на RTTI
> а пока объект не создашь - RTTI нету.

Не верно. У оператора is правый операнд должен быть классом, а левый экземпляром класса, а ты ему подсовываешь, грубо говоря, два класса с обоих сторон...)


 
Palladin ©   (2008-04-06 20:20) [7]

а вот таким образом очень даже можно...

Type
TMyClassRef=Class of TMyClass;
TOtherClass=Class
 ID:Integer;
End;
TMyClass=Class
 ID:Integer;
End;
TMyClass2=Class(TMyClass)
 ID2:Integer;
End;

procedure TForm1.Button1Click(Sender: TObject);
Var
c:TMyClassRef;

Function IsDescOf(c,o:TClass):Boolean;
Begin
 Result:=o=TObject;
 If Not Result Then
  While True Do
   Begin
    Result:=c=TObject;
    If Result Then Begin Result:=False; Break; End;
    Result:=c=o;
    If Result Then Break;
    c:=c.ClassParent;
   End;
End;
begin
c:=TMyClass2;
If IsDescOf(c,TMyClass) Then ShowMessage("OK");
end;


 
Семеныч   (2008-04-06 20:20) [8]

> является ли MyClassRef ссылкой на TMyClass или одного из его потомков

if MyClassRef.InheritsFrom(TMyClass) then _является_;


 
Palladin ©   (2008-04-06 20:33) [9]

а ведь точно, блин... не заметил этот метод...



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2009.01.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
15-1228038652
Slider007
2008-11-30 12:50
2009.01.25
С днем рождения ! 30 ноября 2008 воскресенье


2-1229005474
TNT
2008-12-11 17:24
2009.01.25
ShellExecute(HWND,Null,SP,Null,Null,SW_SHOWNORMAL);


15-1227879313
Nameziz
2008-11-28 16:35
2009.01.25
требования к стилю пользовательского интерфейса


3-1212590501
Varlon
2008-06-04 18:41
2009.01.25
dbgrid заполняется из sql запроса. Надо добавить колонку.


15-1227781745
Vudu
2008-11-27 13:29
2009.01.25
Пользователей обяжут проверять лицензионность используемых програ





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский