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

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

Как узнать тип типа класса...


Jolik ©   (2008-04-06 19:12:00) 

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

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 20:33:00) [1]

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


Palladin   (2008-04-06 20:20:00) [2]

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

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

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

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


{RASkov}   (2008-04-06 20:13:00) [4]

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

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


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

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


Palladin   (2008-04-06 19:35:00) [6]

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


Palladin   (2008-04-06 19:33:00) [7]


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

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


{RASkov}   (2008-04-06 19:24:00) [8]

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

if MyClassRef =TMyClass then ...;
?


Palladin   (2008-04-06 19:22:00) [9]


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

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


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

Нет

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


Наверх

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