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;