... wir sprechen hier über virtal abstract...
Du meinst wohl "virtual". Ich rede jedenfalls über so etwas :
Delphi-Quellcode:
type
TKlasse1 = class
procedure test; virtual; abstract;
end;
TKlasse2 = class (TKlasse1)
procedure test;
end;
var
Klasse1 : TKlasse1;
Klasse2 : TKlasse2;
ABSTRACT
alleine geht überhaupt nicht !
Zitat:
..und da gibt es einen Compiler-Fehler wenn nicht deklariert wurde
Nein, aber wenn es fehlerhaft
implementiert ist, also :
Delphi-Quellcode:
type
TKlasse1 = class
procedure test; virtual; abstract;
end;
var
Klasse1 : TKlasse1;
procedure TKlasse1.UndeklarierteImplementierung;
begin
end;
aber nicht
deklariert ist (in der Klassen-Definition), dann ist die Prozedur erstens "unknown identifier" und zusätzlich kommt noch "Ungenügende Forward- oder External-Deklaration". Ist die Prozedur deklariert mit ABSTRACT, dann reicht das. Mehr geht nicht mal (insbesondere keine konkrete Implementierung). Dann kommt nämlich hier :
Delphi-Quellcode:
procedure TKlasse1.test;
begin
ShowMessage('');
end;
dieser Compilerfehler :
Zitat:
[Fehler] TestUnit.pas(45): Definition für abstrakte Methode 'test' nicht erlaubt
In obigem Fall muss/darf die
procedure TKlasse1.Test;
nicht implementiert werden, man kann im Programm trotzdem auf diese Prozedur zugreifen und produziert damit erst zur Laufzeit einen Fehler. Trotz des Fehlers lässt sich eine EXE erstellen, die lauffähig ist und eben Fehlermeldungen produziert. So richtig nach dem Motto : "es compiliert, wir können ausliefern".