Avatar billede rocco_siffredi Nybegynder
19. december 2006 - 13:11 Der er 1 kommentar og
1 løsning

Interface instans

Hvordan finder jeg typen af en interface instans.
Se herunder

Type
  IEngine = Interface
    .
    .
    .
  end;

  TEngine = Class
    .
    .
    .
  end;

  TEngineX = Class(TEngine, IEngine)
    .
    .
    .
  end;

  TEngineY = Class(TEngine, IEngine)
    .
    .
    .
  end;

  TMachine = Class
  Private
    Engine : IEngine; // TEngineX eller TEngineY
    Function EngineClassAsString : String;
  end;

Function TMachine.EngineClassAsString : String;
begin
  // TEngineX eller TEngineY?
end;

"Is" virker ikke...


// Rocco
Avatar billede martinlind Nybegynder
19. december 2006 - 14:34 #1
Du kan prøve at kigge i TypInfo unit'en, der er alle funktioner til RTTI
Avatar billede hrc Mester
02. januar 2007 - 22:59 #2
Der skal nok være et eller andet der kan fortælle om typen - et eller andet sted. Synes ikke at man skal rode for meget med RTTI; det er for low-level til at være fremtidssikkert.

Hvis der mangler noget så kan du definere en funktion der returnerer din egen type?

Noget i retning af dette:

  TInterfaceTypes = (itEngineX, itEngineY);

  IEngine = Interface
    function GetType : TInterfaceTypes;
  end;

  TEngineX = Class(TEngine, IEngine)
    function GetType : TInterfaceTypes;
  end;

..

function TEngineX.GetType : TInterfaceTypes;
begin
  result := itEngineX;
end;

osv.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester