delphi-overload, override, virtual-Methode

haben einfach die Objekt-Hierarchie wie unten

TLiveThing=class
protected
 FTest:string;
 constructor Create(whereLive:string);overload;virtual;
 constructor Create(haveBone:Boolean);overload;virtual;
end;

THuman=class(TLiveThing)
public
 constructor Create(whereLive:string);overload;override;
 constructor Create(age:integer);overload;
end;

in theoretisch, wenn ich zu instanziieren, THuman, ich habe 2 Konstruktor, aber in der Tat habe ich 5-Konstruktor angezeigt durch code insight, eigentlich will ich, um zu sehen, 3-Konstruktor,
- Erstellen(whereLive:String) überschrieben
- Erstellen(age:integer)
- Erstellen(haveBone:integer)

human:=THuman.Create(       <=====in there I have 5 suggestion constructor

warum habe ich dieses merkwürdige Verhalten? wie es zu lösen ist, weil es so ärgerlich, ich kann nicht immer überprüfen, meine Klasse, die ich brauche, um zu instanziieren, und wenn ich zu instanziieren, wie unten

human:=THuman.Create(); <===== it doesnt give me error

wie ich komplett auszublenden mein anchestor-Konstruktor? , denn wenn ich instatiate wie oben, komplett, geben Sie mir einen falschen Objekt

UPDATE: und auch ich kann Sie sehen standardmäßig Erstellen, ohne parameter von TObject zu

  • Sie haben zu viele virtuelle Konstruktoren. Sie müssen nur ein von denen.
  • Sind Sie sicher, dass Sie die Notwendigkeit, jede virtuelle Konstruktoren? Haben Sie sich jemals tatsächlich zu instanziieren, jede dieser Klassen, ohne zu wissen, den Typ zur compile-Zeit? Wenn nicht, dann brauchen Sie nicht, virtuelle Konstruktoren.
  • Es ist schwer, Sie zu empfehlen hier, weil wir nicht wissen, was dich antreibt, so viele überladene und virtuelle Konstruktoren. Auf den ersten Blick Ihre gesamte design riecht. Meine Instinkte sind, dass die Festsetzung der Bauweise wird die Probleme lösen. Sie versuchen sich zu verstecken von Konstruktoren ist ähnlich wie putting eine wäscheklammer auf die Nase. Das design immer noch riecht, kann man einfach nicht riechen es nicht mehr.
  • oke, ich update meine Frage deutlich zu machen, mein Punkt, denn eigentlich ist in meinem code, die beide Konstrukteure haben ganz unterschiedliche parameter und irgendwann muss ich überschreiben, sowohl der Konstruktor von Basisklasse, und manchmal habe ich einfach Konstruktor von Basisklasse. Natürlich kann ich das umbenennen, einen anderen Konstruktor zu CreateByWhereLive oder etwas anderes anders umgehen mit diesem problem, und ich kann machen Sie es richtig funktioniert, aber wenn ich "Erstellen", ich kann nicht verstehen, warum das Verhalten so...
  • Das update ändert nichts. Sie trifft nicht auf jeden der Punkte, Rob und ich aufgewachsen.
  • in meinem Fall brauche ich ja alle, dass überlastung und virtuellen Konstruktor, ich code in C# auch, aber in c#, ich kann instanziieren Objekt ohne verwirren zu Standard-Konstruktor (parameterlosen Konstruktor), wenn meine Klasse hat keinen default-Konstruktor, mache ich es privat, dann kann ich nicht instanziiert, mit diesem Konstruktor...nur mal so zum Vergleich, so in delphi, ich Suche, wie zu verbergen Vorgänger-Konstruktor, wenn meine abgeleitete Objekt hat keinen Konstruktor, der
  • möglich, Duplikat der so blenden Sie den geerbten Konstruktor von TObject, während die Klasse überlastet sind?
  • Ich brauche alle, die überlastung und virtuellen Konstruktor. Ich bitte zu unterscheiden. Sie sollten nicht mehr als einen virtuellen Konstruktor. Wenn du tust, dein design ist falsch.
  • mögliche Duplikate von Delphi: Wie ausblenden Vorfahren Konstruktoren?
  • oke, ich verstehe, und verwenden Sie die Methode zum ausblenden der Standard-Konstruktor von TObject, aber ich will, 2 Konstruktor von Basisklasse, die überschrieben werden können oder nicht durch abgeleitetes Objekt, wenn die Klasse überschreiben, zwei Konstruktor von Basisklasse, also wenn ich instanziiere ich habe nur 2 Konstruktor, wenn die abgeleitete Klasse haben ein original-Konstruktor und einen Konstruktor überschrieben von der Basis-Klasse, die ich erwartet habe ich habe 3 Konstruktor, wenn ich das Objekt instanziieren, 1 aus der Basis-Klasse, 2 aus der abgeleiteten Klasse( original und überschriebenen Konstruktor ein), wie erreichen Sie das?

InformationsquelleAutor navirius | 2013-05-25
Schreibe einen Kommentar