An alle Delphianer!!!
-
Hi!!!
Schaut euch mal das an:
unit Test; interface type TMyClass = class private zahl: Integer; public constructor Create; function output: Integer; end; //--------------------------------------------------------------------------- TTester = class public myinst: TMyClass; constructor Create(num: Integer); destructor Destroy; override; end; implementation //--------------------------------------------------------------------------- // TMyClass //--------------------------------------------------------------------------- constructor TMyClass.Create; begin zahl := 10; end; function TMyClass.output: Integer; begin Result := zahl; end; //--------------------------------------------------------------------------- // TTester //--------------------------------------------------------------------------- constructor TTester.Create(num: Integer); begin myinst := TMyClass.Create; TMyClass(myinst).zahl := num; end; destructor TTester.Destroy; begin myinst.Free; end; end.
Kann mir jemand sagen warum das hier funktioniert. Vor allem: TMyClass(myinst).zahl := num;
obwohl wie man sieht TMyClass.zahl private ist.Hab im Quelltext von VCL entdeckt in der StdCtrls.pas im konstruktor von TCustomMemo steht da:
VCL Source schrieb:
constructor TCustomMemo.Create(AOwner: TComponent); begin ... FLines := TMemoStrings.Create; TMemoStrings(FLines).Memo := Self; end;
und die TMemoStrings (StdCtrls.pas) sieht so aus:
VCL Source schrieb:
TMemoStrings = class(TStrings) private Memo: TCustomMemo; ...
-
bIce schrieb:
myinst := TMyClass.Create; TMyClass(myinst).zahl := num;
Wozu der Cast?
Und guck dir doch einfach nochmal die Erklärung zu private und protected in der Sprachreferenz an, die beiden haben nämlich eine andere Bedeutung als in C++.
-
In Delphi stehen alle Klassen, die in einer Unit stehen, automatisch
in einem friend-Verhältnis á la C++Und guck dir doch einfach nochmal die Erklärung zu private und protected in der Sprachreferenz an, die beiden haben nämlich eine andere Bedeutung als in C++.
Nope. Bedeutet das gleiche wie in allen anderen Sprachen auch. Delphi fügt
allerdings noch die Direktive published zu private/protected/public hinzu.
-
Taurin schrieb:
In Delphi stehen alle Klassen, die in einer Unit stehen, automatisch
in einem friend-Verhältnis á la C++Den Unterschied meinte ich. In C# z. B. heißt das Delphi-"private" nochmal anders ("internal private", glaube ich).
-
Also ich hab auch in der Hilfe angeschaut, da steht, dass auf Private Datenelemente von jeder Klasse innerhalb einer Unit zugegriffen werden kann. Deswegen funktioniert auch das Beispiel.
Und zu der Frage wieso ich es im Beispiel caste ( TMyClass(myinst).zahl := num ) kann ich nur sagen weil, dass in VCL Source so steht. Ich war halt von dem Code so "geblendet", dass ich mich ausschließlich darauf konzentrierte wie man auf Private Elemente zugreifen kann. Na gut, in C++ geht es auch, aber nicht so einfach.
Wie das aber in C# aussieht, habe ich keine Ahnung.
-
Laß den Cast mal weg, der ist Blödsinn.