AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Klassendesign

Ein Thema von jus · begonnen am 31. Jan 2017 · letzter Beitrag vom 8. Feb 2017
Antwort Antwort
mjustin

Registriert seit: 14. Apr 2008
3.005 Beiträge
 
Delphi 2009 Professional
 
#1

AW: Problem mit Klassendesign

  Alt 8. Feb 2017, 14:53
Meine Frage an die Experten, ist der obige Code noch Factory konform, oder ist es nur irgendwas?
Sieht interessant aus - spannend ist zu klären, ob ein Konstruktor aufgerufen würde. Angenommen, THund hat einen parameterlosen Konstruktor. Wird er aufgerufen?

In diesem ähnlichen Code würde der Konstruktor nicht aufgerufen:

Delphi-Quellcode:
type
   TMyClass = class(TObject)
     MyStrings: TStrings;
     constructor Create; virtual;
   end;

constructor TMyClass.Create;
begin
   MyStrings := TStringList.Create;
end;

procedure Test;
var
   Clazz: TClass;
   Instance: TObject;
begin
   Clazz := TMyClass;
   Instance := Clazz.Create;
end;
Dieses negative Resultat kann ich mir auch bei einem THund Konstruktor vorstellen.
Michael Justin
  Mit Zitat antworten Zitat
jus

Registriert seit: 22. Jan 2005
343 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Problem mit Klassendesign

  Alt 8. Feb 2017, 22:46
@mjustin hast recht, in diesem Fall wird es nicht aufgerufen. Ich muß zugeben, dass ich bisher nicht soviel mit Objekten gearbeitet habe. Wenn ich dann absichtlich die TTier Klasse um einen Konstruktor wie folgt erweitere, merke ich, dass dieser abgearbeitet wird. Wäre es dann so in Ordnung?
Delphi-Quellcode:
unit TierFactory;

interface

uses Classes, TierIntf, Dialogs;

type
  TTier = class(TInterfacedPersistent, ITier)
  public
    constructor Create; virtual; abstract;
    class function CreateInstance(Name: string): TTier; overload;
    procedure GibLaut; virtual; abstract;
  end;

implementation

{ TTier }

class function TTier.CreateInstance(Name: string): TTier;
var
  AClass: TPersistentClass;
begin
  Result := nil;
  AClass := GetClass(Name);
  if Assigned(AClass) then
  begin
    Result := AClass.NewInstance as TTier;
    Result.Create;
  end
  else
    { error handle }

end;

end.
Delphi-Quellcode:
unit Hund;

interface

uses Dialogs, Classes, TierFactory;

type
  THund = class(TTier)
  public
    constructor Create; override;
    procedure GibLaut; override;
  end;

implementation

{ THund }

constructor THund.Create;
begin
  inherited;

end;

procedure THund.GibLaut;
begin
  inherited;
  showmessage('Ich bin ein '+ Classname);
end;

initialization
  RegisterClass(THund);

finalization
  UnRegisterClass(THund);

end.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz