AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Verhindern von Instanzierung eines Objekts mit Create
Thema durchsuchen
Ansicht
Themen-Optionen

Verhindern von Instanzierung eines Objekts mit Create

Ein Thema von warheart · begonnen am 24. Apr 2008 · letzter Beitrag vom 30. Mai 2008
Antwort Antwort
Seite 1 von 3  1 23      
warheart

Registriert seit: 24. Apr 2008
Ort: Bern
5 Beiträge
 
Delphi 2006 Professional
 
#1

Verhindern von Instanzierung eines Objekts mit Create

  Alt 24. Apr 2008, 11:35
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 http://dn.codegear.com/article/34324 aufgebaut:
Delphi-Quellcode:
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');
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?

Beispiel
Delphi-Quellcode:
TMyClass.StatProc('Hello'); // soll funktionieren
myObj := TMyClass.Create; // soll nicht funktionieren
Danke und Gruss an die Welt
************************************************** *
We have transformed information into a form of garbage, and ourselves into garbage collectors
(Neil Postman)
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#2

Re: Verhindern von Instanzierung eines Objekts mit Create

  Alt 24. Apr 2008, 11:37
Hallo,

anscheinend geht soetwas nicht; hatte das Problem auch schonmal -> hier
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: Verhindern von Instanzierung eines Objekts mit Create

  Alt 24. Apr 2008, 13:03
Schmeiss einfach eine Exception im Konstruktor. Dann wird die Erstellung des Objektes abgebrochen und es ist wie gewünscht.
  Mit Zitat antworten Zitat
warheart

Registriert seit: 24. Apr 2008
Ort: Bern
5 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Verhindern von Instanzierung eines Objekts mit Create

  Alt 24. Apr 2008, 13:46
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
Constructor Create; virtual; abstract Das gibt aber eben auch eine Exception und nicht einen Compiler-Fehler.
************************************************** *
We have transformed information into a form of garbage, and ourselves into garbage collectors
(Neil Postman)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Verhindern von Instanzierung eines Objekts mit Create

  Alt 24. Apr 2008, 13:58
Zitat von warheart:
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...
Der Entwickler wird doch wohl schon mindestens 1 * seinen Code aufrufen.
Das Problem bei Delphi ist das die abstrakt-Definition nicht bei der Klassendefinition möglich ist sondern nur auf Methodenebene.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
warheart

Registriert seit: 24. Apr 2008
Ort: Bern
5 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Verhindern von Instanzierung eines Objekts mit Create

  Alt 13. Mai 2008, 10:47
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
************************************************** *
We have transformed information into a form of garbage, and ourselves into garbage collectors
(Neil Postman)
  Mit Zitat antworten Zitat
Benutzerbild von phXql
phXql

Registriert seit: 11. Mär 2004
Ort: Mühldorf
824 Beiträge
 
#7

Re: Verhindern von Instanzierung eines Objekts mit Create

  Alt 13. Mai 2008, 11:30
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.
"Dunkel die andere Seite ist"
"Yoda! Halts Maul und iss deinen Toast!"
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#8

Re: Verhindern von Instanzierung eines Objekts mit Create

  Alt 27. Mai 2008, 22:39
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
Felix Alter
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#9

Re: Verhindern von Instanzierung eines Objekts mit Create

  Alt 28. Mai 2008, 08:28
Zitat von FAlter:
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
Hat wohl den gleichen Effekt wie 'strict private'
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#10

Re: Verhindern von Instanzierung eines Objekts mit Create

  Alt 28. Mai 2008, 11:36
Hi,

ich dachte, es wurde eine Lösung gesucht, die nicht compiliert. Bitte, man muss nur Warnungen als Fehler interpretieren, und das geht mit Hier im Forum suchenDDevExtensions. Siehe Bild.

Mfg
FAlter
Miniaturansicht angehängter Grafiken
example_190.jpg  
Felix Alter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 12:42 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