AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi auf Klassen-Variable innerhalb einer anderen Klasse zugreifen
Thema durchsuchen
Ansicht
Themen-Optionen

auf Klassen-Variable innerhalb einer anderen Klasse zugreifen

Ein Thema von juergen · begonnen am 8. Feb 2023 · letzter Beitrag vom 10. Feb 2023
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#1

auf Klassen-Variable innerhalb einer anderen Klasse zugreifen

  Alt 8. Feb 2023, 22:54
Hallo,

schwierig zu beschreiben, ich versuch es mal (ganz rudimentär runtergebrochen).

Ich habe Unit1 und Unit2.
In der Unit1 habe ich eine Klasse definiert.
In der Unit2 habe ich eine andere Klasse definiert.

Nun erstelle ich zur globalen Verfügbarkeit in der Unit1 eine Instanz (Variable) für die Klasse aus Unit2.
Delphi-Quellcode:
   
VAR
  frm_Main: Tfrm_Main;
  JsonDatabaseParam: TDataBase; //meine Klassenvariable auf TDataBase aus Unit2

Ich muss nun von allen anderen Units auf diese Klasseninstanz "JsonDatabaseParam" zugreifen können.
Bis hierhin alles gut.

Ich muss aber auch innerhalb meiner anderen Klasse aus Unit1 in deren Proceduren auf "JsonDatabaseParam" zugreifen können.

Ich hoffe, dass das halbwegs verständlich ist.

Wie setzt man sowas um?

Vielen Dank schon mal vorab.
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)

Geändert von juergen ( 8. Feb 2023 um 22:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.462 Beiträge
 
Delphi 12 Athens
 
#2

AW: auf Klassen-Variable innerhalb einer anderen Klasse zugreifen

  Alt 8. Feb 2023, 23:42
Ich hoffe, dass das halbwegs verständlich ist.
Nicht wirklich.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.491 Beiträge
 
Delphi 7 Professional
 
#3

AW: auf Klassen-Variable innerhalb einer anderen Klasse zugreifen

  Alt 8. Feb 2023, 23:54
Als Prozedur- bzw. Funktionsparamter übergeben.

In der Klasse aus Unit1 ein Attribut vom Typ der Klasse aus Unit2 definieren und diesem Attribut der Klasse aus Unit1 dann eine Instanz der Klasse aus Unit2 zuweisen. Analog zu z. B. TDataSource und dem Attribut DataSet, dem man eine Komponente vom Type TDataSet (oder deren Nachfahren) zuweist. Dann kommt man sogar ohne globale Variabeln aus.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.088 Beiträge
 
Delphi 12 Athens
 
#4

AW: auf Klassen-Variable innerhalb einer anderen Klasse zugreifen

  Alt 9. Feb 2023, 01:14
Unit2 ins USES der Unit1,

ABER besser gibt man (DU) den Funktionen/KlassenMethoden im Unit1, beim Erstellen oder Aufrufen, die gewünschte Instanz "JsonDatabaseParam" als Parameter/Property, anstatt sie sich das selbst holt.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#5

AW: auf Klassen-Variable innerhalb einer anderen Klasse zugreifen

  Alt 9. Feb 2023, 09:29
Juergen, wenn du die Möglichkeit hast, beide Units in eine Unit zusammenzuführen, dann hast du mittels Forward Declarations die Möglichkeit beide Klassen miteinander bekannt zu machen. Geht aber nur in der gleichen Unit.

Damit kann eine Klasse jeweils auf die anderen Klasse zugreifen.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
kretabiker

Registriert seit: 10. Mär 2005
Ort: Bargteheide
183 Beiträge
 
Delphi 12 Athens
 
#6

AW: auf Klassen-Variable innerhalb einer anderen Klasse zugreifen

  Alt 9. Feb 2023, 10:25
Ich wuerde den Vorschlaegen von himitsu und delphi.narium Vorschlag folgen, Stichwort Dependency Injection, lose Koppung usw. Damit waere evtl auch die globale Variable nicht mehr notwendig, aber das haengt von der grundsaetzlichen Anwendungsarchitektur ab
Udo Treichel
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.462 Beiträge
 
Delphi 12 Athens
 
#7

AW: auf Klassen-Variable innerhalb einer anderen Klasse zugreifen

  Alt 9. Feb 2023, 13:05
Tut mir leid, aber ich habe das Problem offenbar immer noch nicht verstanden.
Das hier lese ich aus deinen Ausführungen:

JsonDatabaseParam ist eine Variable im Interface-Teil (weil von anderen Units verwendet) von Unit1.
JsonDatabaseParam ist vom Typ TDataBase, der als Klasse in Unit2 definiert ist.

Damit das compiliert muss Unit2 in der Uses-Anwendung von Unit1 stehen.
Folglich sollte es für Prozedur-Implementationen in Unit1 auch kein Problem darstellen, auf JsonDatabaseParam und deren Methoden zuzugreifen.

Wo liegt also das Problem hiermit?
Ich muss aber auch innerhalb meiner anderen Klasse aus Unit1 in deren Proceduren auf "JsonDatabaseParam" zugreifen können.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: auf Klassen-Variable innerhalb einer anderen Klasse zugreifen

  Alt 9. Feb 2023, 23:49
Vielen lieben Dank für die Tipps!!

Das Problem saß aber vor dem Bildschirm!
Soeben fiel es mir sofort auf. Ich hatte JsonDatabaseParam: TDataBase; statt global zu definieren in der frm_main-Klasse definiert!
Komisch dass ich es gestern Nacht nicht gesehen hatte.
Manchmal ist es aber auch zum Haare raufen.
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)

Geändert von juergen ( 9. Feb 2023 um 23:52 Uhr)
  Mit Zitat antworten Zitat
jus

Registriert seit: 22. Jan 2005
344 Beiträge
 
Delphi 2007 Professional
 
#9

AW: auf Klassen-Variable innerhalb einer anderen Klasse zugreifen

  Alt 10. Feb 2023, 10:53
Juergen, wenn du die Möglichkeit hast, beide Units in eine Unit zusammenzuführen, dann hast du mittels Forward Declarations die Möglichkeit beide Klassen miteinander bekannt zu machen. Geht aber nur in der gleichen Unit.

Damit kann eine Klasse jeweils auf die anderen Klasse zugreifen.
Ich bin öfters mal auf die Forward Deklaration gestossen, nur für welchen Anwendungszweck ist diese Forward Deklaration eigentlich gut?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.462 Beiträge
 
Delphi 12 Athens
 
#10

AW: auf Klassen-Variable innerhalb einer anderen Klasse zugreifen

  Alt 10. Feb 2023, 11:05
Ich bin öfters mal auf die Forward Deklaration gestossen, nur für welchen Anwendungszweck ist diese Forward Deklaration eigentlich gut?
Neben dem Beispiel in der Doku kommt z.B. folgender Beispiel-Fall zur Anwendung:
Delphi-Quellcode:
type
  TContainer = class;

  TContainerItem = class
  private
    FContainer: TContainer;
  protected
    procedure RecalcAll;
  public
    procedure Recalc;
  end;

  TContainer = class
  private
    FItems: TArray<TContainerItem>;
  public
    procedure RecalcAll;
  end;

procedure TContainerItem.RecalcAll;
begin
  FContainer.RecalcAll;
end;

procedure TContainer.RecalcAll;
begin
  for var item in FItems do
    item.Recalc;
end;
Hier wissen die Items, zu wem sie gehören und können was auch immer damit tun.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:48 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