Toon posts:

[delphi] properties doorgeven

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb de onderstaande class
code:
1
2
3
4
5
6
type
  TMyClass = class
    private
    FUser: TUser;  // is een eigen gemaakte class
    FSystem: TSystem; // is een eigen gemaakte class
end;

in TUser staat onder andere de property Name, waarin vanzelfsprekend de naam van de gebruiker staat.

Als ik nu vanuit TMyClass een functie van TSystem wil aanroepen en ik heb daar de gebruikersnaam in nodig, dan kan ik die natuurlijk meegegeven als parameter. Maar ik vind het netter als TSystem deze waarde zelf uit kan lezen, maar volgens mij kan een class niet naar boven in de structuur kijken en weet hij dus eigenlijk niet of TUser bestaat er wat er wel of niet in staat.

Klopt hetgeen wat ik hierboven beweer, of is er wel een mogelijkheid om de username door te geven zonder parameters te gebruiken?

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:53
Ik snap eigenlijk niet juist wat je bedoelt. Kun je misschien iets meer uitleg geven, of adhv een voorbeeld wat verduidelijken?

https://fgheysels.github.io/


Verwijderd

Topicstarter
ik ga het nog een keer proberen

Ik heb de onderstaande classes
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
type
  TMyClass = class
    private
    FUser: TUser;  // is een eigen gemaakte class
    FSystem: TSystem; // is een eigen gemaakte class
end;

type
  TUser = class
    private
    FName: string;
    public 
    property Name: string read FName write FName;
end;

type
  TSystem = class
    public
    procedure DoeIets();
end;

In de functie TSystem.DoeIets() wil ik User.Name gebruiken. Onderstaande implementatie kan echter niet.
code:
1
2
3
4
procedure TSystem.DoeIets();
begin
  Edit1.Text := User.Name;
end;

Een oplossing zou zijn:
code:
1
2
3
4
5
6
7
8
9
10
type
  TSystem = class
    public
    procedure DoeIets(Name: string);
end;

procedure TSystem.DoeIets(Name: string);
begin
  Edit1.Text := Name;
end;

Vanuit MyClass kan ik dan de functie DoeIets(User.Name) aanroepen en dan kan ik de naam gebruiken.

Deze wijziging wil ik echter niet toepassen.

De vraag is dus hoe ik in de functie DoeIets() de Naam van de User (User.Naam) kan gebruiker ZONDER dat ik deze mee hoef te geven als parameter.

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:53
Dat zal niet mogelijk zijn want dan breek je het concept van object georienteerd programmeren. Een van de principes waar OO namelijk op steunt is data-hiding; je kan niet rechtstreeks aan private en protected members van een object.
Je zult aan uw functie DoeIets een user object moeten meegeven en het dan gebruiken:
code:
1
2
3
4
5
6
7
8
9
type
  TSystem = class
    public
    procedure DoeIets(User : TUser);
end;
procedure TSystem.DoeIets(User: TUser);
begin
  Edit1.Text := User.Name;
end;

https://fgheysels.github.io/