Autor Beitrag
sunnyandy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47



BeitragVerfasst: Di 04.09.07 23:19 
Hallo,

hab eine Klasse, die folgender Maßen definiert ist:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
unit DatabaseTables;

interface

  uses
    AdoDB;

  type TDatabaseTables = class

  private

  public
    class procedure ErzeugeTabellen; static;

  end;

implementation

class procedure TDatabaseTables.ErzeugeTabellen;
var
  command: TADOCommand;
begin
  command := TADOCommand.Create(nil);

end;


In der Klasse kann ich per TDatabaseTables.ErzeugeTabellen auf die Prozedur zurückgreifen.
Was ist der genaue Unterschied zu der Klasse, die ich etwas abgeändert habe:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
unit DatabaseTables;

interface

  uses
    AdoDB;

implementation

class procedure ErzeugeTabellen;
var
  command: TADOCommand;
begin
  command := TADOCommand.Create(nil);

end;

end.

Hier kann ich ja nun per DatabaseTables.ErzeugeTabellen die Prozedur aufrufen...

Ist das zweite so etwas wie eine statische Klasse, aus der ich keine Objekte erzeugen kann? Kann ich die zweite bevorzugen, wenn ich nur statische Methoden implementieren möchte?

Danke!
Gruß, Andy
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 05.09.07 02:46 
Der Unterschied ist, dass es sich im zweiten Fall nicht um eine Klasse handelt. Es handelt sich dabei nur um Routinen, die innerhalb einer logischen Einheit der Programmiersprache (einer Unit) zusammengefasst sind, nicht aber im Sinne der Objektorientierung in einer Klasse.

Wenn du nur einzelne Methoden hast, dann brauchst du aber auch gar keine Klassen. Denn die Vorteile der objektorientierten Programmierung (Vererbung, etc.) kommen dabei gar nicht zur Anwendung.

Das Schlüsselwort class gehört da jedoch dann auch nicht hin (es gibt ja keine Klasse), außerdem muss die Routine vor implementation deklariert werden, damit du von außerhalb der Unit darauf zugreifen kannst:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
unit DatabaseTables;

interface

uses
  AdoDB;

procedure ErzeugeTabellen;

implementation

procedure ErzeugeTabellen;
var
  command: TADOCommand;
begin
  command := TADOCommand.Create(nil);

end;
sunnyandy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47



BeitragVerfasst: Mi 05.09.07 07:52 
Oh super, danke!
Dann werde ich natürlich das richtige Klassensystem bevorzugen!

Gruß, Andy