![]() |
D2009 Spracherweiterungen
Hallo,
ich habe noch nicht so richtig verstanden, was mir die anonymen Methoden in D2009 bringen. Die Beispiele die zu finden sind, da ist die Procedure/Functionsdeclaration in eine Typanweisung verlagert. Sieht nach mehr Schreibaufwand aus. In C# verwende ich anonyme Methoden hauptsächlich um für Propertys Getter/Setter Methoden zu deklarieren. Das ist wohl in D2009 schon konzeptionell nicht möglich? Generics können hier auch eigene Klassen verwendet werden? Also
Delphi-Quellcode:
Für Aufklärung dankbar.
Type
myclass = class ... end; x : TList<myclass> Gruß Peter |
Re: D2009 Spracherweiterungen
In den
![]() |
Re: D2009 Spracherweiterungen
Zitat:
Gruß Peter |
Re: D2009 Spracherweiterungen
Zitat:
Code:
Dann ist das keine anonyme Methode sondern eine normale Getter / Setter deklaration.
private bool _Test;
public bool Test { get { return _Test; } set { _Test = value; } } Anonyme Methoden benutzt man normalerweise, wenn man irgendwelche kurzen Eventhandler inline deklarieren will:
Code:
oder um eine Methode als Callback zu übergeben, wenn sie kurz genug ist.
btnTest.Click += new delegate(object sender, EventArgs e) { MessageBox.Show(((Button)sender).Text + "Clicked!"); }
|
Re: D2009 Spracherweiterungen
Zitat:
Du definierst damit eine Variable, die auf eine Methode mit dieser Signatur zeigen kann. Dadurch kann man Code ausführen, den man gar nicht kennt. Du kannst damit einen QuickSort schrieben, der keine Ahnung von dem zu sortierenden Typen haben muss, weil man ihm die Vergleichsmethode übergibt.
Delphi-Quellcode:
Das heißt, du schreibst QuickSort genau einmal und nie wieder.
type
TComparison<T> = reference to function(const left, right : T) : Integer; TQuickSorter = class public class procedure Sort<T>(aList : TList<T>; aComparison : TComparison<T>); static; ... Wenn du es ausführen willst, musst du ihm nur sagen wie er 2 Werte des Typen vergleichen soll: Wenn du schon eine Funktion hast, die das kann:
Delphi-Quellcode:
Wenn nicht:
TQuickSorter.Sort<Integer>(deineListe, @CompareInteger);
Delphi-Quellcode:
Der Vorteil diese Minischnipsel an Code direkt inline zu haben sollte auf der Hand liegen.
TQuickSorter.Sort<DeineKlasse>(deineListe,
function(const left, right : DeineKlasse) : Integer; begin result := CompareInteger(left.SomeValue, right.SomeValue); end); Du kannst sofort dort wo du es nutzt sehen was passiert, ohne erst die spezielle Implementierung suchen zu müssen. Zitat:
Ich glaibe immer noch nicht, dass du wirklich weißt, was eine anonyme Methode ist. ;-) Zitat:
Was ich ungeheuer schade finde ist, dass String, Integer, Double, etc keine Standard-Interfaces wie IEquatable<T> oder IComparable<T> implementieren. Dadurch sind wirklich generische Funktionen schon derb eingeschränkt. Denn nun muss man wirklich immer und überall Funktionsreferenzen übergeben um zu vergleichen oder auf Gleichheit zu prüfen... :? |
Re: D2009 Spracherweiterungen
Immerhin gibt es jhetzt .ToString()
|
Re: D2009 Spracherweiterungen
Zitat:
In der Konstellation
Delphi-Quellcode:
verwende ich sie ja öfters.
button1.Click += delegate(object s, EventArgs e1) { MessageBox.Show("Hallo World"); };
Mein Denkfehler war, das ich die implizite Deklaration der Get/Set Methode als namenlose Declaration mit dazu gerechnet habe. Also wie z.B. in Chrome
Delphi-Quellcode:
spart viel Schreibarbeit.
Test = public class
private public property Owner : User; end; User = public class private fTest : List<Test> := new List<Test>; public property Username : String; property Test[idx : Integer] : Test read fTest[idx]; end; Gruß Peter |
Re: D2009 Spracherweiterungen
Zitat:
|
Re: D2009 Spracherweiterungen
Ich hoffe das dies als Klassenoperator implementiert ist.
|
Re: D2009 Spracherweiterungen
Zitat:
Extrem-High-Level Funktiontionen wie diese und Compiler-Magicpassen nun absolut überhaupt gar nicht zusammen. Richtig interessant wird das ToString ohnehin erst wenn die VCL richtiges, Objekt-basiertes Databinding lernt. Wirklich wichtig is Equals und GetHashCode, da durch generische Dictionaries möglich sind. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz