class function

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Mathias
Beiträge: 6899
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

class function

Beitrag von Mathias »

Verstehe ich das richtig, bei eine class function, kann ich auf Create unf Free verzichten ?
Diese Function ist somit statisch vorhanden ?

Code: Alles auswählen

program Project1;
 
type
 
  { TTest }
 
  TTest = class
    class function Add1(a, b: integer): integer;
    function Add2(a, b: integer): integer;
  end;
 
  { TTest }
 
  class function TTest.Add1(a, b: integer): integer;
  begin
    Result := a + b;
  end;
 
  function TTest.Add2(a, b: integer): integer;
  begin
    Result := a + b;
  end;
 
var
  Test: TTest;
 
begin
  Writeln(TTest.Add1(4, 6));  // ohne Speicherreservierung
  Writeln(Test.Add1(3, 5));    // gibt eine Schutverletzung
  Test := TTest.Create;
  Writeln(Test.Add1(3, 5));    // mit Speicherreservierung
  Test.Free;
  Readln;
end.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10857
Registriert: Mo 11. Sep 2006, 19:01

Re: class function

Beitrag von theo »

Ja.

Leviathan
Beiträge: 3
Registriert: Do 25. Dez 2014, 10:38

Re: class function

Beitrag von Leviathan »

Naja, so einfache Antwort.... :roll:

Mathias
Beiträge: 6899
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: class function

Beitrag von Mathias »

Dann ist class function etwa dasselbe wie bei Java static void ?

Code: Alles auswählen

package javatest;
 
class test {
	static void Hello() {
		System.out.print("Hello ");
	}
 
	void World() {
		System.out.print("World");
	}
}
 
public class main {
 
	public static void main(String[] args) {
 
		test.Hello();
		test.World();  // Dies gibt ein Fehler in Eclipse
 
		System.out.print('\n');
 
		test dyn=new test();
 
		dyn.Hello();  // Hier kommt eine Warnung, aber der Code läuft.
		dyn.World();
	}
 
}
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10857
Registriert: Mo 11. Sep 2006, 19:01

Re: class function

Beitrag von theo »

Mathias hat geschrieben:Dann ist class function etwa dasselbe wie bei Java static void ?
Wie "static" ja, afaik.
"void" bedeutet ja nur keinen Rückgabewert (Procedure)

http://www.marcocantu.com/papers/ooplang.htm

Mathias
Beiträge: 6899
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: class function

Beitrag von Mathias »

Es ging mir nur wegen static, sonst hätte ich es so machen müssen:

Code: Alles auswählen

class test {
	static int Hello() {
		System.out.print("Hello ");
		return 2;
	}
 
	int World() {
		System.out.print("World");
		return 2;
	}
}
 
PS: Interessanter Link.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10857
Registriert: Mo 11. Sep 2006, 19:01

Re: class function

Beitrag von theo »

Ein Beispiel wo das in der LCL verwendet wird, findet man z.B. in Graphics.pas bei TFPImageBitmap.

Das ist dafür gedacht, z.B. einen "unbekannten" ImageHandler zu fragen, ob er mit einem bestimmtem Format (JPEG, TIFF etc.) umgehen kann.
Falls ja, kann man ihn instanziieren.

Code: Alles auswählen

    class function IsStreamFormatSupported(Stream: TStream): Boolean; override;
    class function IsFileExtensionSupported(const FileExtension: string): boolean; 

Antworten