AGB  ·  Datenschutz  ·  Impressum  







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

Constructor verbergen

Ein Thema von s-off · begonnen am 30. Jan 2008 · letzter Beitrag vom 30. Jan 2008
Antwort Antwort
s-off
(Gast)

n/a Beiträge
 
#1

Re: Constructor verbergen

  Alt 30. Jan 2008, 09:31
Hallo,

vielen Dank für Eure Tipps.

Bezüglich der 'strict private'-Variante habe ich es nun auf zweierlei Art und Weise probiert:
Delphi-Quellcode:
TMeinMemoObject = Class(TObject)
strict private
  Constructor Create; overload;
private
  FValue: String;
  
  Procedure CreateMeinMemoObject(oMemo: TMeinMemo);
public
  Property Value: String read FValue;
end;

TMeinMemo = Class(TMemo)
private
  Function GetMeinMemoObject: TMeinMemoObject;
public
  Property MeinMemoObject : TMeinMemoObject read GetMeinMemoObject;
end;
Aufruf dann per
Delphi-Quellcode:
Procedure TMeinMemo.BaueMemoObject;
var
  oMemoObject: TMeinMemoObject;
Begin
  oMemoObject := TMeinMemoObject.CreateMeinMemoObject(Self);
End;
Diese Variante hat mehrere Compilermeldungen zur Folge:
Zitat:
[Pascal Fehler] uMeinMemo.pas(563): E2076 Diese Form des Methodenaufrufs ist nur für Klassenmethoden erlaubt
[Pascal Fehler] uMeinMemo.pas(731): E2075 Diese Form des Methodenaufrufs ist nur in Methoden von abgeleiteten Typen erlaubt
Die zweite Variante sieht so aus:
Delphi-Quellcode:
TMeinMemoObject = Class(TObject)
strict private
  Constructor Create; overload;
private
  FValue: String;
protected
  Constructor Create(oMemo: TMeinMemo); overload;
public
  Property Value: String read FValue;
end;

TMeinMemo = Class(TMemo)
private
  Function GetMeinMemoObject: TMeinMemoObject;
public
  Property MeinMemoObject : TMeinMemoObject read GetMeinMemoObject;
end;
Aufruf dann per
Delphi-Quellcode:
Procedure TMeinMemo.BaueMemoObject;
var
  oMemoObject: TMeinMemoObject;
Begin
  oMemoObject := TMeinMemoObject.Create(Self);
End;
Diese Variante hat nur einen Hinweis zur Folge, der nicht weiter stört
Zitat:
[Pascal Hinweis] uTSplitCellStringGrid.pas(96): H2219 Das private-Symbol 'Create' wurde deklariert, aber nie verwendet
Alles weitere Funktioniert so weit.
Wenn ich nun aber versuche, von außen auf den Constructor zuzugreifen, dann wird mir dieser auch nicht mehr in der CodeVervollständigung angezeigt, aufrufen kann ich ihn aber trotzdem, was dann zu einer Exception führt

Wo liegt der Fehler?

Edit:
@xaromz
Zitat von xaromz:
sMeinString := oMeinMemo.MeinMemoObject.Value; Damit erzeugst Du IMHO kein neues Objekt, sondern rufst den Konstruktor eines bestehenden Objekts als normale Methode auf.
damit möchte ich ja auch gar kein neues Objekt erzeugen, sondern nur Zeigen, wie ich auf Felder dieser Klasse von außen zugreife - das Beispiel mit dem Erzeugen des Objektes war etwas weiter unten
Zitat:
oMeinMemo.MeinMemoObject.Create(oMeinMemo);
  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 11:58 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-2025 by Thomas Breitkreuz