| Autor |
Beitrag |
martin300
      
Beiträge: 186
Erhaltene Danke: 2
|
Verfasst: Mo 14.04.08 20:05
Hallo,
folgender Code ist Teil eines Beispiels. Leider bin ich
nicht in der Lage den Code in Delphi darzustellen.
Java:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| public class Bellen { private String geräusch;
public Bellen (String bellen){ this.geräusch = bellen; }
public String getGeräusch(){ return geräusch; }
public boolean equals (Object bellen){ if (bellen instanceof Bellen){ Bellen anderesBellen = (Bellen)bellen; if (this.geräusch.equalsIgnoreCase(anderesBellen.getGeräusch())){ return true; } } return false; } } |
Besonders interessiert mich die equals Methode. Danke.
Moderiert von Christian S.: Code-Tags hinzugefügt
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Mo 14.04.08 22:05
Bellen() ist der Konstruktor
Equals ein class operator der die Eigenschaft Geraeusch zweier Instanzen vergleicht
_________________ Markus Kinzler.
|
|
martin300 
      
Beiträge: 186
Erhaltene Danke: 2
|
Verfasst: Di 15.04.08 08:48
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Di 15.04.08 09:39
Delphi unterstütz Klassen-Operatoren unter Win32 nur für Records, deshalb hier als normale Methode.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| TBellen = class var private Fgeraeusch : String; public constructor Create (Value: String); function getGeraeusch :String; function equals( bellen: Tbellen) : boolean; end;
constructor Bellen.Create( Value: String); begin inherited Create; Fgeraeusch := Value; end;
function TBellen.getGeraeusch; begin result := Fgeraeusch; end;
function TBellen.equals(bellen: TBellen); begin if Bellen.getGeraeusch = FGeraeusch result := True else result := False; end;
end. |
_________________ Markus Kinzler.
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Di 15.04.08 11:11
Nicht ganz richtig.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| TBellen = class private FGeraeusch : String; public constructor Create (Value: String); function getGeraeusch :String; function equals( bellen: TBellen) : boolean; end;
constructor TBellen.Create( Value: String); begin inherited Create; Fgeraeusch := Value; end;
function TBellen.getGeraeusch; begin result := FGeraeusch; end;
function TBellen.equals(Bellen: TBellen); begin Result:= AnsiCompareText(Bellen.getGeraeusch, FGeraeusch) = 0; end;
end. |
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
martin300 
      
Beiträge: 186
Erhaltene Danke: 2
|
Verfasst: Mi 16.04.08 10:21
Danke für die sehr guten Antworten.
Eine Frage hätte ich zu diesem Thema noch.
Gibt es in Delphi die Möglichkeit eine Klasse vom Typ "Object" zu definieren,
so wie es in Java möglich ist?
Quelltext 1: 2: 3:
| public boolean equals (Object bellen){ if (bellen instanceof Bellen){ |
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 16.04.08 10:27
Ja, die Basisklasse in Delphi ist TObject. Das Äquivalent zu instanceof dürfte is sein.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Mi 16.04.08 10:46
So könnte es mit dem Class Operator aussehen:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; procedure FormCreate(Sender: TObject); private public end;
TBellen = record strict private FGeraeusch : String; FName: string; public class operator equal( bellen1, bellen2: TBellen) : boolean; property Geraeusch: string read FGeraeusch write FGeraeusch; property Name: string read FName write FName; end;
var Form1: TForm1;
implementation
{$R *.dfm}
class operator TBellen.equal(Bellen1, Bellen2: TBellen): Boolean; begin Result:= AnsiCompareText(Bellen1.Geraeusch, Bellen2.Geraeusch) = 0; end;
procedure TForm1.FormCreate(Sender: TObject); var Hund1, Hund2, Hund3: TBellen; begin Hund1.Name := 'Bello'; Hund1.Geraeusch := 'Wuff Wuff'; Hund2.Name := 'Rufus'; Hund2.Geraeusch := 'Wau Wau'; Hund3.Name := 'Strolchi'; Hund3.Geraeusch := 'Wuff Wuff';
Label1.Caption := Hund1.Name + ' bellt '; if not (Hund1 = Hund2) then Label1.Caption := Label1.Caption + 'nicht '; Label1.Caption := Label1.Caption + 'wie '+Hund2.Name;
Label2.Caption := Hund1.Name + ' bellt '; if not (Hund1 = Hund3) then Label2.Caption := Label2.Caption + 'nicht '; Label2.Caption := Label2.Caption + 'wie '+Hund3.Name;
end;
end. |
_________________ Markus Kinzler.
|
|
martin300 
      
Beiträge: 186
Erhaltene Danke: 2
|
Verfasst: Do 17.04.08 10:22
Hier das vollständige Beispiel.
Es gibt die Klassen TFernsteuerung, TBellErkennung, THundeTuer und TBellen.
Die THundeTuer lässt sich öffnen, schließen, hat einen Status, ein zulässiges Bellen läßt sich hinzufügen und gibt die zulässigen Bellen wieder zurück.
Die TBellen Objekte speichern ein Bellen und führen einen Vergleich durch.
In der TBellERkennung wird ein zulässiges Bellen erkannt. Die Tür öffnet sich....
Zusätzlich lässt sich die Tür noch mit der TFernsteuerung öffnen.
Start erfolgt über: THundeTuerSimulator.InitialisiereWerte;
Zur Namensgebung habe ich noch ein Frage:
zb. bei TTuer := THundeTuer.create;
Wir hier das Objekt nur mit Tuer bezeichnet od. mit TTuer?
Freue mich auch über andere Anmerkungen.
Zuletzt bearbeitet von martin300 am Mo 21.04.08 08:30, insgesamt 1-mal bearbeitet
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 17.04.08 11:00
Das T gehört vor Typnamen davor, in deinem Fall THundeTuer. Vor eine Variable gehört das T nicht, also sollte diese nur Tuer heißen, denn es ist ja eine Variable und kein Typ.
In dem Zusammenhang dürfte für dich der Styleguide interessant sein, der genau diese Regeln beinhaltet:
www.delphi-treff.de/delphi-styleguide/
oder das Orignal auf englisch:
dn.codegear.com/article/10280
|
|