Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Sichtbarkeit von klassenlokalen Typen (https://www.delphipraxis.net/204905-sichtbarkeit-von-klassenlokalen-typen.html)

Codehunter 13. Jul 2020 07:12

Delphi-Version: 10.2 Tokyo

Sichtbarkeit von klassenlokalen Typen
 
Hallo!
Delphi-Quellcode:
type
  TmyBaseClass = class(TObject)
  protected type
    TmyNestedType = record
      SomeProperty: Integer;
    end;
  end;
 
  TmyChildClass = class(TmyBaseClass)
  protected
    function Produce: TmyNestedType; // E2003: Undeklarierter Bezeichner: TmyNestedType
  end;
Warum?

Grüße
Cody

BerndS 13. Jul 2020 07:19

AW: Sichtbarkeit von klassenlokalen Typen
 
Warum das nicht geht frage ich mich auch. Aber so sollte es gehen.
Delphi-Quellcode:
    function Produce: TmyBaseClass.TmyNestedType; // E2003: Undeklarierter Bezeichner: TmyNestedType

Codehunter 13. Jul 2020 07:35

AW: Sichtbarkeit von klassenlokalen Typen
 
Ich habe es inzwischen so ähnlich gelöst. Aber beide Lösungen wirken irgendwie freaky.
Delphi-Quellcode:
  TmyBaseClass = class(TObject)
  protected type
    TmyNestedType = record
      SomeProperty: Integer;
    end;
  end;
 
  TmyChildClass = class(TmyBaseClass)
  protected type
    TmyNestedType = TmyBaseClass.TmyNestedType;
  protected
    function Produce: TmyNestedType;
  end;

Uwe Raabe 13. Jul 2020 08:27

AW: Sichtbarkeit von klassenlokalen Typen
 
Mach doch einen Feature Request auf.

himitsu 13. Jul 2020 09:21

AW: Sichtbarkeit von klassenlokalen Typen
 
Delphi-Quellcode:
TmyNestedType
kann natürlich nicht gehen, da es vom aktuellen Scope aus nicht sichtbar ist.
Delphi-Quellcode:
TmyBaseClass.TmyNestedType
wäre somit "eigentlich" richtig.

Ich vermute mal, dass es aber noch nicht bekannt ist, da der TYPE-Block noch nicht abgeschlossen ist.
Auch bei den Generics gibt es da schonmal Problemchen.

Delphi-Quellcode:
type
  TmyBaseClass = class(TObject)
  protected type
    TmyNestedType = record
      SomeProperty: Integer;
    end;
  end;
 
type
  TmyChildClass = class(TmyBaseClass)
  protected
    function Produce: TmyBaseClass.TmyNestedType;
  end;
TmyNestedType könnte hier sogar private sein, nur nicht strict-private, aber wegen der Vererbung von TmyChildClass wäre protected am Besten, da gleiches Level wie Produce.


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