Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi [BDS2006] Create wird nicht versteckt? (https://www.delphipraxis.net/79715-%5Bbds2006%5D-create-wird-nicht-versteckt.html)

DevilsCamp 26. Okt 2006 22:18


[BDS2006] Create wird nicht versteckt?
 
Ich habe folgenden Code:
Unit1:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses Unit2;

procedure TForm1.FormCreate(Sender: TObject);
var
  test: TTest;
begin
  test := TTest.Create;
  Sleep(1000);
  test.Free;
end;

end.

Unit2:
Delphi-Quellcode:
unit Unit2;

interface

uses Windows, Classes;

type
  TTest = class(TObject)
  private
    { private-Deklarationen }
    constructor Create;
  protected
    { protected-Deklarationen }
  public
    { public-Deklarationen }

  published
    { published-Deklarationen }
  end;

implementation

{ TTest }

constructor TTest.Create;
begin
  inherited;
end;

end.

Theoretisch sollte der Konstruktor von TTest in Unit1 nicht mehr sichtbar sein. Ich kann aber den Code ohne Probleme compilieren. Warum?

Bernhard Geyer 26. Okt 2006 22:21

Re: [BDS2006] Create wird nicht versteckt?
 
Er findet ja den Construktor der Basisklasse und wird diesen verwenden.

Muetze1 26. Okt 2006 22:41

Re: [BDS2006] Create wird nicht versteckt?
 
AFAIR kann man keine Methoden mit einer höheren Sichtbarkeit in ihrer Sichtbarkeit verringern. Immer nur erhöhen.

Bernhard Geyer 27. Okt 2006 06:06

Re: [BDS2006] Create wird nicht versteckt?
 
Zitat:

Zitat von Muetze1
AFAIR kann man keine Methoden mit einer höheren Sichtbarkeit in ihrer Sichtbarkeit verringern. Immer nur erhöhen.

Vor allem dann nicht wenn die Methode der Basisklasse keine Virtuelle/Dynamische Methode ist und damit kein Overloading durchgeführt wird.

DevilsCamp 27. Okt 2006 06:37

Re: [BDS2006] Create wird nicht versteckt?
 
Dann sind die ganzen Tipps, die sowas vorschlagen also für'n A.... ...


Aber wie könnte ich den Konstruktor verstecken, damit ich z.B. eine Klasse schreiben kann, die nur unter bestimmten Umständen (z.B. aus einer anderen Klasse heraus) instanziiert werden kann?

mkinzler 27. Okt 2006 06:42

Re: [BDS2006] Create wird nicht versteckt?
 
Deklariere sie im Interface-Teil der Unit (die andere Klasse muß sich dann in der selben Unit befinden)

DevilsCamp 27. Okt 2006 06:48

Re: [BDS2006] Create wird nicht versteckt?
 
Zitat:

Zitat von mkinzler
Deklariere sie im Interface-Teil der Unit (die andere Klasse muß sich dann in der selben Unit befinden)

Das allerdings würde dazu führen, dass ich diese Klasse nicht als private Member-Klasse verwenden kann.

uligerhardt 27. Okt 2006 07:40

Re: [BDS2006] Create wird nicht versteckt?
 
Zitat:

Zitat von DevilsCamp
Aber wie könnte ich den Konstruktor verstecken, damit ich z.B. eine Klasse schreiben kann, die nur unter bestimmten Umständen (z.B. aus einer anderen Klasse heraus) instanziiert werden kann?

Zur Compilezeit gar nicht, siehe hier.

Uli.

DevilsCamp 27. Okt 2006 08:22

Re: [BDS2006] Create wird nicht versteckt?
 
Zitat:

Zitat von uligerhardt
siehe hier.

So mache ich es bisher.
Habe aber gehofft, es gibt eine Möglichkeit ohne Exception...


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 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