Thema: Delphi Instanzen einer Klasse

Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Instanzen einer Klasse

  Alt 7. Okt 2003, 17:32
Moin MickMack,

leite einfach von TObject ab, und führe selber eine Eigenschaft Name ein, die Du im Konstruktor mit angibst.
Selbst dynamisch erzeugte Komponenten (von TComponent abgeleitet) erhalten nicht automatisch einen Namen. Den muss man selber angeben (und verwalten um doppelte zu verhindern).
Um Dir die Verwaltung zu vereinfachen könntest Du noch eine weitere Klasse erstellen, die dann eine Liste der Objekte der eigentlichen Klasse enthält, und für eine Korrekte Namensvergabe zuständig ist.
Die könnte dann die Eigenschaft Name auf 'NeuerName'+IntToStr(LaufendeNummer) setzen.
Um die Abfrage zu erleichtern (vor allem aber schneller zu machen) könntest Du natürlich auch gleich, statt des Namens, ein numerisches Feld für die Unterscheidung vorsehen.

Für den zweiten Fall mal ein kleines Beispiel:

Delphi-Quellcode:
type
  TTestSub = class(TObject)
  private
    FiInstance : integer;
  public
    function rechnen (beispielInteger:Integer): Integer;
    property Instance : integer read FiInstance write FiInstance;
  end;

  TTestMain = class(TObject)
  private
    FList : TList;
  public
    constructor Create;
    destructor Destroy; override;
    function Add : TTestSub;
  end;

implementation

{$R *.DFM}

function TTestMain.Add : TTestSub;
begin
  Result := TTestSub.Create;
  FList.Add(Result);
  Result.Instance := FList.Count;
end;

constructor TTestMain.Create;
begin
  inherited;
  FList := TList.Create;
end;

destructor TTestMain.Destroy;

var
  i : integer;

begin
  for i := 0 to FList.Count-1 do begin
    TTestSub(FList.Items[i]).Free;
  end;
  FreeAndNil(FList);
  inherited;
end;

function TTestSub.rechnen(beispielInteger: Integer): Integer;
begin
  Result := self.Instance*beispielInteger;
end;

procedure TForm1.Button1Click(Sender: TObject);

var
  tm : TTestMain;
  tc1 : TTestSub;
  tc2 : TTestSub;

begin
  tm := TTestMain.Create;
  try
    tc1 := tm.Add;
    tc2 := tm.Add;
    ShowMessage(IntToStr(tc1.Rechnen(3)));
    ShowMessage(IntToStr(tc2.Rechnen(3)));
  finally
    FreeAndNil(tm);
  end;
end;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat