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

Вниз

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

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

Наверх




Память: 0.49 MB
Время: 0.02 c
2-1229332381
9899100
2008-12-15 12:13
2009.01.25
Наследник от TGraphicControl


15-1227633295
Поросенок Винни-Пух
2008-11-25 20:14
2009.01.25
pda версия форума


2-1229116495
Михаил
2008-12-13 00:14
2009.01.25
Движение


15-1228401946
utkin295
2008-12-04 17:45
2009.01.25
Создание интерпретатора


2-1228831692
ther
2008-12-09 17:08
2009.01.25
редактирование ListView