![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать тип типа класса...
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 ...;
Нет
опиши задачу подробней.