Ich verwende eine visuelle Komponente TJvListView
aus der JEDI JVCL-Bibliothek. Hier sind die relevanten Deklarationen dieser Komponentenklasse:
TJvListView = class(TJvExListView)
private
FOnSaveProgress: TJvOnProgress;
public
procedure SaveToStrings(Strings: TStrings; Separator: Char);
Ich versuche, die SaveToStrings()
Methode durch meine eigene geänderte Definition zu ersetzen . Ich habe versucht, dies mit der "Interposer" -Klassenmethode zu tun :
uses
JvListView
type
TJvListView = class(JvListView.TJvListView)
public
procedure SaveToStrings(Strings: TStrings; Separator: Char);
end;
TfrmFaultMemView = class(TForm)
lvFMEs: TJvListView;
end;
procedure TJvListView.SaveToStrings(Strings: TStrings; Separator: Char);
begin
if Assigned(Self.FOnSaveProgress) then // COMPILER ERROR HERE
begin
end;
end;
Die ursprüngliche Methode hängt vom Zugriff auf einige private Mitglieder der Klasse ab, und ich muss diesen Code in meiner geänderten Definition behalten.
Wenn ich jedoch versuche, dies zu kompilieren, wird ein Fehler angezeigt:
E2361 Auf privates Symbol TJvListView.FOnSaveProgress kann nicht zugegriffen werden
Ich versuche, eine öffentliche Methode neu zu definieren, aber es ist unvermeidlich, dass sie auf private Mitglieder / Methoden zugreifen müssen. Wie kann ich diese Methode mit meiner eigenen Definition überladen?
Anstatt die Eigenschaft private
field FOnSaveProgress
use zu verwendenpublished
OnSaveProgress
Wenn Sie Klasse erweitern können Sie nur zugreifen , es ist protected
, public
oder published
Mitglieder. Private
Mitglieder sind privat und können nicht einmal von einer erweiterten Klasse aus erreicht werden. Der einzige Ort, an dem Sie auf private
Mitglieder einer anderen Klasse zugreifen können, ist, wenn sich beide Klassen in derselben Einheit befinden und Mitglieder nicht als markiert sind strict private
.
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen