AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu Inherited

Ein Thema von BAMatze · begonnen am 11. Mai 2009 · letzter Beitrag vom 12. Mai 2009
Antwort Antwort
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#1

Frage zu Inherited

  Alt 11. Mai 2009, 21:45
Hallo und Guten Abend an alle DP´ler,

Ich hab da mal eine Frage zu inherited. Und zwar schreibe ich mir gerade auf, was ich bis jetzt so über Komponentenerstellung kennen gelernt habe und habe einen Quellcode geschrieben der wie folgt aussieht:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if (Key in [#0..#7, #9..#15, #17..#26, #28..#47, #58..#255]) then key := #0
  else inherited;
end;

end.
Ich weiß ist nichts wirklich weltbewegendes, aber eins ist mir dabei aufgefallen: Die von mir eigentlich unbeabsichtigte Verwendung von inherited. Eigentlich kenne ich das nur bei der Erstellung von Komponenten, damit die ursprüngliche, vererbte Methode in der überschriebenen aufgerufen werden kann. Die Procedure, so wie sie dort steht macht anscheinend genau was ich möchte. Leider habe ich in der Hilfe zu inherited nur Erklärungen gefunden, die auf die Vererbung von Methoden zurückführen, was ich (glaube ich) zumindest ja eigentlich nicht mache oder wenn dann völlig ohne meines Wissens.

Wie ist die anscheinend richtige Verwendung des Begriffes inherited aber ohne Vererbung zu veerstehen? Kann mir das vieleicht mal jemand erklären?

Vielen Dank
BAMatze

[quote]
2. Account Sero
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Frage zu Inherited

  Alt 11. Mai 2009, 21:49
inherited ruft einfach die Methode der Superklasse auf
Markus Kinzler
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Frage zu Inherited

  Alt 11. Mai 2009, 21:56
Zitat von mkinzler:
inherited ruft einfach die Methode der Superklasse auf
Also könnte man salopp inherited mit "tue das übliche" übersetzen?
2. Account Sero
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Frage zu Inherited

  Alt 11. Mai 2009, 21:58
Wenn du mit "üblich" das ererbt Verhalten meinst, ja.
Markus Kinzler
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Frage zu Inherited

  Alt 11. Mai 2009, 22:11
Zitat von mkinzler:
Wenn du mit "üblich" das ererbt Verhalten meinst, ja.
danke das war es schon
2. Account Sero
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Frage zu Inherited

  Alt 11. Mai 2009, 22:21
Wobei die meisten Propertys für die Ereignisbehandlung bei VCL Komponenten wohl sowieso undefiniert sind?!
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.351 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Frage zu Inherited

  Alt 11. Mai 2009, 22:26
In dem Fall passiert bei inherited schlicht gar nichts, denn es gibt keine entsprechende Methode im Vorfahren. In dem Fall gibt es keinen Fehler, denn das könnte ja später hinzugefügt werden.

Damit das etwas bewirkt muss in der Oberklasse (was hier TForm wäre) eine genau gleichnamige virtuelle Methode vorhanden sein, die du überschrieben hast.

Hier hast du die aber neu eingeführt und als Ereignisbehandlungsroutine zugewiesen, eine Methode "Edit1KeyPress" gibt es in TForm nicht. Fazit: Entferne einfach das else mit dem inherited, es wird keinen Unterschied machen.
Denn die weitere Behandlung der Tastatureingabe passiert nach der Benachrichtigung an dich via Edit1KeyPress sowieso. Nur dass du bei unerwünschten Tasten die Nulltaste (also nix) aus der Eingabe gemacht hast. Also kommt nix mehr an.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.005 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Frage zu Inherited

  Alt 12. Mai 2009, 07:56
Zitat von jaenicke:
In dem Fall passiert bei inherited schlicht gar nichts, denn es gibt keine entsprechende Methode im Vorfahren. In dem Fall gibt es keinen Fehler, denn das könnte ja später hinzugefügt werden.
Die IDE ist hier schlauer als der Compiler:

wenn man einen Button-Eventhandler schreibt, der nur inherited enthält,

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  inherited;
end;
wird er beim Kompilieren komplett gelöscht, die IDE scheint zu merken, dass der Code 'nichts' macht.

Der Compiler jedoch gibt keinen Hinweis, wenn ein inherited ins Leere geht.
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:58 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