![]() |
Delphi-Version: 5
Aufrufkontext von protected
Man denke sich folgende Struktur:
Delphi-Quellcode:
Im Fall der Klasse C spukt der Compiler die Nachricht "Auf protected Symbol A.DoStuffA kann nicht zugegriffen werden".
//Unit1:
type A = Class protected procedure DoStuffA; end; //Unit2: type B = Class(A) private FOtherObject : TSomeOtherObject; public procedure DoStuffB; end; implementation procedure B.DoStuffB; begin FOtherObject.InstanceOfB.DoStuffA; end; //Unit3 type C = class (A) private FOtherObject : TSomeOtherObject; public procedure DoStuffC; end; implementation procedure C.DoStuffC; begin FOtherObject.InstanceOfB.DoStuffA; end; //Unit99 type TSomeOtherObject = Class public InstanceOfB : B; end; Im Fall der Klasse B bleibt der Compiler ruhig. Gibt es hierfür eine sinnvolle Begründung? |
AW: B =Aufrufkontext von protected
Zitat:
...:cat:... |
AW: Aufrufkontext von protected
Aber es sind alles unterschiedliche Units.
|
AW: Aufrufkontext von protected
B erbt von A, also hat es auch Zugriff auf das Protected von A.
|
AW: Aufrufkontext von protected
C erbt aber auch von A.
|
AW: Aufrufkontext von protected
Aber Du rufst ja nicht die Methode von C auf, sondern von dessen interner Instanz von B, und da ist diese protected.
|
AW: Aufrufkontext von protected
B greift in der der Unit "extern" auf eine Instanz von B zu, wo B deklariert ist, also hat es die unit-lokalen Rechte, wo alles Lokale wie "public" ist (außer bei Strict).
B greift auch "extern" auf eine Instanz von B zu, wo B aber nicht deklariert ist, also hat es die "realen" Rechte, wo es natürlich Protected ist.
Delphi-Quellcode:
type
TEditAccess = class(TEdit); TEditAccess(EineEditInstanz).EineProtectedMethode; Wie DeddyH schon sagte: Wenn du direkt auf diese Methode zureifst (
Delphi-Quellcode:
), dann siehst du es mit den inneren Rechten der eigenen Klasse, wo es Protected ist, also für dich immer wie public.
Self.DoStuff
Du greifst aber extern auf die Funktion einer "anderen" Instanz drauf zu. Mit
Delphi-Quellcode:
würde auch B knallen, da damit der unit-lokale Einfluss gebugfixt wurde.
strict protected
Innerhalb einer Unit ist Alles, was dort deklariert wurde, wie public (mit Ausnahme der Strict-Private und Strict-Protected). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:57 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