![]() |
Verhindern von Instanzierung eines Objekts mit Create
Hallo Delphi Gemeinde
Meine erste Frage hier dreht sich um einen relativ komischen Wunsch, nicht so alltäglich. Ich habe eine Klasse gemacht, die alle Methoden static hat und alle Membervariablen mit class var deklariert hat. Das Ganze ist nach diesem Beispiel von ![]()
Delphi-Quellcode:
Nun ist es allerdings immer noch möglich, den Constructor mit Create aufzurufen. Um allen potenziellen Benutzern der Klasse klar zu machen, dass man davon keine eigenen Instanzen machen darf, möchte ich das aufrufen von Create verbieten. Ist das irgendwie möglich? :gruebel:
type
TMyClass = class strict private class var FX: Integer; strict protected // Note: accessors for class properties must be declared class static. class function GetX: Integer; static; class procedure SetX(val: Integer); static; public class property X: Integer read GetX write SetX; class procedure StatProc(s: String); static; end; TMyClass.X := 17; TMyClass.StatProc('Hello'); Beispiel
Delphi-Quellcode:
Danke und Gruss an die Welt
TMyClass.StatProc('Hello'); // soll funktionieren
myObj := TMyClass.Create; // soll nicht funktionieren |
Re: Verhindern von Instanzierung eines Objekts mit Create
|
Re: Verhindern von Instanzierung eines Objekts mit Create
Schmeiss einfach eine Exception im Konstruktor. Dann wird die Erstellung des Objektes abgebrochen und es ist wie gewünscht.
|
Re: Verhindern von Instanzierung eines Objekts mit Create
Das gefällt mir eben auch nicht. Ich möchte wenn schon einen Compiler-Fehler. Weil sonst vergisst plötzlich jemand die Exception ab zu fangen und zu behandeln. Dann gibts plötzlich unschöne Effekte...
Ich habe auch schon mit einem abstrakten Constructor probiert
Delphi-Quellcode:
Das gibt aber eben auch eine Exception und nicht einen Compiler-Fehler.
Constructor Create; virtual; abstract
|
Re: Verhindern von Instanzierung eines Objekts mit Create
Zitat:
Das Problem bei Delphi ist das die abstrakt-Definition nicht bei der Klassendefinition möglich ist sondern nur auf Methodenebene. |
Re: Verhindern von Instanzierung eines Objekts mit Create
Naja, ich habe mich nun entschieden, das ganze anders zu lösen. Und zwar habe ich ein globales Objekt erstellt (wird für Logging verwendet). So kann ich auch sicher sein, dass es das Objekt nur einmal gibt.
Danke jedenfalls für die Kommentare. Gruss |
Re: Verhindern von Instanzierung eines Objekts mit Create
Was passiert, wenn man einen privaten Konstruktor definiert?
// Edit: Ach vergesst es, grad den anderen Thread gesehen und gelesen.. Da wurde ja genau das versucht. |
Re: Verhindern von Instanzierung eines Objekts mit Create
Hi,
der Thread ist zwar schon etwas älter. aber irgendwie ist mir gerade dazu eine Idee gekommen: Ein abstrakter Konstruktor kann nicht aufgerufen werden! Das gibt sogar ne Warnung (sowie Exception zur Laufzeit), und mit DDevExtensions wird ein Fehler zur Compilezeit draus ;) Naja, aber ne bessere Idee hab ich dann doch nicht. Mfg FAlter |
Re: Verhindern von Instanzierung eines Objekts mit Create
Zitat:
|
Re: Verhindern von Instanzierung eines Objekts mit Create
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
ich dachte, es wurde eine Lösung gesucht, die nicht compiliert. Bitte, man muss nur Warnungen als Fehler interpretieren, und das geht mit ![]() Mfg FAlter |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:20 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