-
Есть такой код:
type
TMyClass = class;
end;
TMyClassRef = class of TMyClass;
если создать класс типа TMyClass то я могу использовать оператор is
MyClass := TMyClass.Create();
...
if MyClass is TMyClass then ...;
А есть ли возможность в Дельфи узнать на какой класс указывает сслыка на класс?
Т.е что-то типа
if MyClassRef is TMyClass then ...;
Заранее благодарен! -
Palladin © (06.04.08 19:22) [1]
> если создать класс типа TMyClass то я могу использовать
> оператор is
а что мешает? можешь конечно
> А есть ли возможность в Дельфи узнать на какой класс указывает
> сслыка на класс?
> Т.е что-то типа
>
> if MyClassRef is TMyClass then ...;
Нет
опиши задачу подробней. -
{RASkov} © (06.04.08 19:24) [2]> [0] Jolik © (06.04.08 19:12)
> if MyClassRef is TMyClass then ...;if MyClassRef = TMyClass then ...;
? -
Palladin © (06.04.08 19:33) [3]
> {RASkov} © (06.04.08 19:24) [2]
ну ща... :) а наследники? еслив было все так просто... -
Palladin © (06.04.08 19:35) [4]хотя общая задача неясна... может ему как раз это и нужно...
-
Дельфи на if MyClassRef is TMyClass then ...; ругается.
В общемто и правильно - я так понимаю is работает на RTTI а пока объект не создашь - RTTI нету.
Мне надо знать - является ли MyClassRef ссылкой на TMyClass или одного из его потомков (наследников)?
У меня есть список ссылок на класс и хотелось бы среди них выделить ссылки на TMyClass или его потомков. -
{RASkov} © (06.04.08 20:13) [6]> [5] Jolik © (06.04.08 20:02)
> В общемто и правильно - я так понимаю is работает на RTTI
> а пока объект не создашь - RTTI нету.
Не верно. У оператора is правый операнд должен быть классом, а левый экземпляром класса, а ты ему подсовываешь, грубо говоря, два класса с обоих сторон...) -
Palladin © (06.04.08 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; -
Семеныч (06.04.08 20:20) [8]> является ли MyClassRef ссылкой на TMyClass или одного из его потомков
if MyClassRef.InheritsFrom(TMyClass) then _является_; -
Palladin © (06.04.08 20:33) [9]а ведь точно, блин... не заметил этот метод...