AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Override von Konstanten im Objekt - Alternative?
Thema durchsuchen
Ansicht
Themen-Optionen

Override von Konstanten im Objekt - Alternative?

Ein Thema von bernau · begonnen am 25. Dez 2017 · letzter Beitrag vom 30. Dez 2017
 
EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
415 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Override von Konstanten im Objekt - Alternative?

  Alt 26. Dez 2017, 10:21
ich habe einfach mit dem Beispiel von Uwe Rabe gespielt und folgenden code vervollständigt:
Delphi-Quellcode:
unit uMain;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    lblA: TLabel;
    lblB: TLabel;
    btn1: TButton;
    btn2: TButton;
    btn3: TButton;
    procedure btn1Click(Sender: TObject);
    procedure btn3Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

Type
  TObjectA = class
  strict private const
    cTestValue = 'aaa';
  public
    Function testvalue: String; virtual;
    Procedure MachWasMitTestValue;
  end;

  TObjectB = class(TObjectA)
  strict private const
    cTestValue = 'bbb';
  public
    Function testvalue: String; override;
  end;

procedure TObjectA.MachWasMitTestValue;
begin
  ShowMessage(testvalue);
end;

function TObjectA.testvalue: String;
  begin
    Result := cTestValue;
  end;

  function TObjectB.testvalue: String;
  begin
    Result := cTestValue;
  end;

procedure TForm1.btn1Click(Sender: TObject);
var ObjectA:TObjectA;
begin
  ObjectA := TObjectA.Create;
  try
    lblA.Caption:=ObjectA.testvalue;
    //ObjectA.MachWasMitTestValue;
  finally
    ObjectA.Free;
  end;
  ObjectA.MachWasMitTestValue;
end;

procedure TForm1.btn2Click(Sender: TObject);
var ObjectB: TObjectB;
begin
  ObjectB:=TObjectB.create;
  try
    lblB.Caption:=ObjectB.testvalue;
    ObjectB.MachWasMitTestValue;
  finally
    ObjectB.free;
  end;
end;

procedure TForm1.btn3Click(Sender: TObject);
begin
  close;
end;

end.
Dann habe ich wie geschrieben die Methode MachwasmitTestValue versehentlich nach der Freigabe des ObjectA aufgerufen und es geht. Es geht wie es gehen soll innerhalb des try...finaly-Blocks, aber ach Wunder: auch hinter diesem, aber warum?
Norbert
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01: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