Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie Klassen (keine Instanz!) als Variable übergegben? (https://www.delphipraxis.net/107111-wie-klassen-keine-instanz-als-variable-uebergegben.html)

BlueStarHH 22. Jan 2008 18:43


Wie Klassen (keine Instanz!) als Variable übergegben?
 
Hallo,

wie kann ich an eine Funktion eine Klasse übergeben? Ich möchte keine Instanz einer Klasse übergeben, sondern die Klasse selbst um in einer Liste zu suche, ob diese Liste ein Objekt einer bestimmten Klasse enthält (mit dem is-Operator):

Delphi-Quellcode:
TOberklasse = class(TOject)
...

TKlasseX = class(TOberklasse)
...

TKlasseY = class(TOberklasse)
...

function TFoo.IndexOfClass(AClass: XXXXX <-- Was kommt hier hin?): Integer;
var
  i: Integer;
begin
  Result := -1;
  for i := 0 to Count - 1 do
    if Items[i] is AClass then
    begin
      Result := i;
      Break;
    end
end;
Aufruf:
AFoo.IndexOfClass(TKlasseX)
oder
AFoo.IndexOfClass(TKlasseY)

Um es vorwegzunehmen: Wenn an der Stelle XXXX TOberklasse steht, meckert der Compiler, weil er dann ja eine Inszanz einer Klasse haben möchte...

Neutral General 22. Jan 2008 18:45

Re: Wie Klassen (keine Instanz!) als Variable übergegben?
 
Hi,

:arrow: TClass

Gruß
Neutral General

freak4fun 22. Jan 2008 18:56

Re: Wie Klassen (keine Instanz!) als Variable übergegben?
 
Delphi-Quellcode:
function TFoo.IndexOfClass(AClass: TOberklasse): Integer;
Das sollte gehen! Wie heißt der genaue Fehler?
Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TParent = class

  end;

  TChild = class(TParent)

  end;

  TTest = class(TChild)

  end;

  TForm2 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    procedure test(AClass: TParent);
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
var
  ltest: TTest;
begin
  test(ltest);
end;

procedure TForm2.test(AClass: TParent);
begin
  ShowMessage('-.-');
end;

end.

BlueStarHH 22. Jan 2008 18:56

Re: Wie Klassen (keine Instanz!) als Variable übergegben?
 
Danke, TClass klappt. Damit kann ich im Prinzip jedoch jede Klasse übergeben. Kann ich es nicht irgendwie so einschränken, dass ich nur Unterklassen von meiner TOberklasse übergeben kann?

BlueStarHH 22. Jan 2008 19:04

Re: Wie Klassen (keine Instanz!) als Variable übergegben?
 
Hallo freak4fun,

Du hast wahrscheinlich die Frage nicht verstanden. Also nochmals zur verdeutlichung, Hinweise zu Deinem Code:

Zitat:

Zitat von freak4fun
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
begin
  test(ltest); <-- Hier soll TTest (Klasse) übergeben werden und nicht lTest (Instanz)!
end;


Apollonius 22. Jan 2008 19:05

Re: Wie Klassen (keine Instanz!) als Variable übergegben?
 
Schau mal in die Hilfe unter Delphi-Referenz durchsuchenKlassenreferenzen. Du kannst es so machen:
Delphi-Quellcode:
type TOberklasseClass = class of TOberklasse;

function TFoo.IndexOfClass(AClass: TOberklasseClass): Integer;

Neutral General 22. Jan 2008 19:06

Re: Wie Klassen (keine Instanz!) als Variable übergegben?
 
Zitat:

Zitat von BlueStarHH
Danke, TClass klappt. Damit kann ich im Prinzip jedoch jede Klasse übergeben. Kann ich es nicht irgendwie so einschränken, dass ich nur Unterklassen von meiner TOberklasse übergeben kann?

Hi,


Delphi-Quellcode:
type
  TOberklasseClass = class of TOberklasse;

function KeineAhnung(AClass: TOberklasseClass): Integer;
Edit: Sry da kam kein roter Kasten :oops:

Gruß
Neutral General

freak4fun 22. Jan 2008 19:07

Re: Wie Klassen (keine Instanz!) als Variable übergegben?
 
Achso, ja hast recht. Sorry! :oops:

BlueStarHH 22. Jan 2008 19:07

Re: Wie Klassen (keine Instanz!) als Variable übergegben?
 
Danke Apollonius + Neutral General. Genau das habe ich gesucht!

BlueStarHH 22. Jan 2008 19:09

Re: Wie Klassen (keine Instanz!) als Variable übergegben?
 
Zitat:

Zitat von freak4fun
Achso, ja hast recht. Sorry! :oops:

Nicht schlimm. Besser so, als gar nicht zu helfen ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz