Конференция "Основная" » Как узнать тип типа класса...
 
  • Jolik © (06.04.08 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 © (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]
    хотя общая задача неясна... может ему как раз это и нужно...
  • Jolik © (06.04.08 20:02) [5]
    Дельфи на 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]
    а ведь точно, блин... не заметил этот метод...
 
Конференция "Основная" » Как узнать тип типа класса...
Есть новые Нет новых   [134484   +49][b:0][p:0.001]