Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Prism Der Typ muss als abstrakt deklariert werden (https://www.delphipraxis.net/42262-der-typ-muss-als-abstrakt-deklariert-werden.html)

Mario 16. Mär 2005 14:34


Der Typ muss als abstrakt deklariert werden
 
In folgendem kleinen Demo-Projekt bekomme ich folgende Exception:

Zitat:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Projekt Project1.exe traf auf die unhandelte Exception-Klasse System.NullReferenceException mit der Meldung 'Der Typ muss als abstrakt deklariert werden, wenn eine der Methoden als abstrakt deklariert ist.'.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
Delphi-Quellcode:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  TAbstraktClass = class
  private
  public
    class function GetValue: Integer; virtual; abstract;
  end;

  TRealClass = class(TAbstraktClass)
  private
  public
    class function GetValue: Integer; override;
  end;

{ TRealClass }

class function TRealClass.GetValue: Integer;
begin
  Result := 15;
end;

begin
  Writeln(TRealClass.GetValue.toString);
end.
Was will mir diese Fehlermeldung sagen, was ich anders machen soll?

mschaefer 16. Mär 2005 14:50

Re: Der Typ muss als abstrakt deklariert werden
 
...

Mario 16. Mär 2005 15:31

Re: Der Typ muss als abstrakt deklariert werden
 
Tja, sind in .Net statische abstrakte Methoden wohl nicht mehr erlaubt. Nicht abstrakt funktioniert es genauso:
Delphi-Quellcode:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  TAbstraktClass = class
  private
  public
    class function GetValue: Integer; virtual;
  end;

  TRealClass = class(TAbstraktClass)
  private
  public
    class function GetValue: Integer; override;
  end;

{ TRealClass }

class function TRealClass.GetValue: Integer;
begin
  Writeln('TRealClass.GetValue');
  Result := 15;
end;

{ TAbstraktClass }

class function TAbstraktClass.GetValue: Integer;
begin
  Writeln('TAbstraktClass.GetValue');
  Result := 0;
end;

begin
  Writeln(TRealClass.GetValue.toString);
  Readln;
end.
ich benötige halt nur eine Dummy-Routine, welche nie aufgerufen wird.

In C# habe ich beim Versuch, eine Methode static abstract zu machen, gleich einen Compiler-Fehler bekommen.

Sanchez 16. Mär 2005 19:23

Re: Der Typ muss als abstrakt deklariert werden
 
Hallo,
In C# muss die Klasse als abstrakt deklariert sein, damit sie abstrakte Methoden beinhalten kann. Obs in Delphi seit .NET auch ist weiss ich nicht.

grüße, daniel

Mario 16. Mär 2005 19:48

Re: Der Typ muss als abstrakt deklariert werden
 
Jep, aber eine abstrakte Methode darf ich dann trotzdem noch nicht statisch markieren, leider.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:09 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