Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort zur 5. Auflage
1 Allgemeine Einführung in .NET
2 Grundlagen der Sprache C#
3 Klassendesign
4 Vererbung, Polymorphie und Interfaces
5 Delegates und Ereignisse
6 Weitere .NET-Datentypen
7 Weitere Möglichkeiten von C#
8 Auflistungsklassen (Collections)
9 Fehlerbehandlung und Debugging
10 LINQ to Objects
11 Multithreading und die Task Parallel Library (TPL)
12 Arbeiten mit Dateien und Streams
13 Binäre Serialisierung
14 Einige wichtige .NET-Klassen
15 Projektmanagement und Visual Studio 2010
16 XML
17 WPF – Die Grundlagen
18 WPF-Containerelemente
19 WPF-Steuerelemente
20 Konzepte der WPF
21 Datenbindung
22 2D-Grafik
23 ADO.NET – verbindungsorientierte Objekte
24 ADO.NET – Das Command-Objekt
25 ADO.NET – Der SqlDataAdapter
26 ADO.NET – Daten im lokalen Speicher
27 ADO.NET – Aktualisieren der Datenbank
28 Stark typisierte DataSets
29 LINQ to SQL
30 Weitergabe von Anwendungen
Stichwort

Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Visual C# 2010 von Andreas Kühnel
Das umfassende Handbuch
Buch: Visual C# 2010

Visual C# 2010
geb., mit DVD
1295 S., 49,90 Euro
Rheinwerk Computing
ISBN 978-3-8362-1552-7
Pfeil 7 Weitere Möglichkeiten von C#
Pfeil 7.1 Namensräume (Namespaces)
Pfeil 7.1.1 Zugriff auf Namespaces
Pfeil 7.1.2 Die »using«-Direktive
Pfeil 7.1.3 Globaler Namespace
Pfeil 7.1.4 Vermeiden von Mehrdeutigkeiten
Pfeil 7.1.5 Namespaces festlegen
Pfeil 7.1.6 Der ::-Operator
Pfeil 7.2 Generics – generische Datentypen
Pfeil 7.2.1 Lösung mit einer generischen Klasse
Pfeil 7.2.2 Typparameter mit Constraints einschränken
Pfeil 7.2.3 Generische Methoden
Pfeil 7.2.4 Generics und Vererbung
Pfeil 7.2.5 Konvertierung von Generics
Pfeil 7.2.6 Generische Delegates
Pfeil 7.2.7 Generische Klassen in der .NET-Klassenbibliothek
Pfeil 7.3 Operatorüberladung
Pfeil 7.3.1 Syntax der Operatorüberladung
Pfeil 7.3.2 Operatorüberladungen in »GeometricObjectsSolution«
Pfeil 7.3.3 »true«- und »false«-Operatoren
Pfeil 7.3.4 Benutzerdefinierte Konvertierungen
Pfeil 7.4 Indexer
Pfeil 7.4.1 Überladen von Indexern
Pfeil 7.4.2 Parameterbehaftete Eigenschaften
Pfeil 7.5 Erweiterungsmethoden
Pfeil 7.6 Implizit typisierte Variablen (Typinferenz)
Pfeil 7.7 Lambda-Ausdrücke
Pfeil 7.8 Anonyme Typen
Pfeil 7.9 Nullable-Typen
Pfeil 7.10 Attribute
Pfeil 7.10.1 Das »Flags«-Attribut
Pfeil 7.10.2 Anmerkungen zu den Attributen
Pfeil 7.10.3 Benutzerdefinierte Attribute
Pfeil 7.10.4 Attribute auswerten
Pfeil 7.10.5 Festlegen der Assembly-Eigenschaften
Pfeil 7.11 Partielle Methoden
Pfeil 7.12 Dynamisches Binden
Pfeil 7.12.1 Eine kurze Analyse
Pfeil 7.12.2 Dynamische Objekte
Pfeil 7.13 Unsicherer (unsafe) Programmcode – Zeigertechnik in C#
Pfeil 7.13.1 Einführung
Pfeil 7.13.2 Das Schlüsselwort »unsafe«
Pfeil 7.13.3 Deklaration von Zeigern
Pfeil 7.13.4 Die »fixed«-Anweisung
Pfeil 7.13.5 Zeigerarithmetik
Pfeil 7.13.6 Der Operator »->«


Galileo Computing - Zum Seitenanfang

7.7 Lambda-Ausdrücke topZur vorigen Überschrift

In Kapitel 5, »Delegates und Ereignisse«, hatte ich Ihnen im Zusammenhang mit den Delegates das Beispielprogramm AnonymeMethoden vorgestellt. Zur Erinnerung: An der Konsole wurde der Anwender zur Eingabe von zwei Zahlen aufgefordert. Anschließend konnte der Benutzer entscheiden, ob er die beiden Zahlen addieren oder subtrahieren möchte. Später wurden im gleichen Kapitel anstelle der Delegates anonyme Methoden verwendet. Hier ist noch einmal die Passage, die für uns im Weiteren von Interesse ist:


...
if (wahl == "A")
  calculate = delegate(double x, double y)   
  {
    return x + y;
  };
  else if (wahl == "S")
    calculate = delegate(double x, double y)
    {
      return x - y;
    };
    else {
      Console.Write("Ungültige Eingabe");
      Console.ReadLine();
      return;
    }
...

Bei einem Lambda-Ausdruck handelt es sich um eine anonyme Methode, die Ausdrücke und Anweisungen enthalten und für die Erstellung von Delegates verwendet werden kann.

Mithilfe von Lambda-Ausdrücken können Sie den Code von oben auch wie folgt formulieren:


...
if (wahl == "A")
  calculate = (double x, double y) => { return x + y;};
else if (wahl == "S")
  calculate = (double x, double y) => { return x - y; };
...

Die beiden Lambda-Ausdrücke in diesem Codefragment sind


(double x, double y) => { return x + y;};

und


(double x, double y) => { return x - y; }

Lambda-Ausdrücke verwenden den Operator =>. Links davon werden die Eingabeparameter angegeben, rechts davon der Ausdruck oder ein Anweisungsblock. Das in der ursprünglichen Fassung vorhandene Schlüsselwort delegate taucht nicht mehr auf.

Der Anweisungsrumpf eines Lambda-Ausdrucks benötigt eine geschweifte Klammer wie jeder andere Anweisungsblock auch und kann beliebig viele Anweisungen enthalten. Häufig anzutreffen sind Lambda-Ausdrücke, deren einzige Anweisung ein return ist. In einem solchem Fall dürfen Sie die return-Anweisung weglassen und können gleichzeitig auch auf die geschweiften Klammern verzichten.


...
if (wahl == "A")
  calculate = (double x, double y) => x + y;
else if (wahl == "S")
  calculate = (double x, double y) => x - y;
...

Bisher scheint es so zu sein, dass die Einführung der Lambda-Ausdrücke nur rein syntaktischer Natur ist. Dem ist aber nicht so. Sehen Sie sich dazu das folgende Codefragment an:


...
if (wahl == "A")
  calculate = (x, y) => x + y;
else if (wahl == "S")
  calculate = (x, y) => x - y;
...

Beachten Sie, dass nun die Angabe der Parametertypen entfernt worden ist. Es handelt sich jetzt um implizit typisierte Parameter, und der Compiler leitet die Parametertypen richtig ab. Vorausgesetzt werden muss dabei natürlich, dass der Operator + für den konkreten Typ von x und y definiert ist. In unserem Beispiel ist das der Fall.

Der Lambda-Ausdruck


(x, y)  => x + y

hat zwei Parameter, die in runden Klammern eingeschlossen und durch ein Komma getrennt sind. Liegt nur ein Parameter vor, können die runden Klammern aus der Parameterliste entfernt werden:


x  => x + x

Bei einem Lambda-Ausdruck mit leerer Parameterliste müssen jedoch die runden Klammen angegeben werden:


()  => a * b

Ein Lambda-Ausdruck, der lediglich eine return-Anweisung enthält, wird als Ausdrucksrumpf bezeichnet.

Projektion und Prädikat

Der Datentyp der Rückgabe eines Lambda-Ausdrucks kann sich vom Datentyp des Parameters unterscheiden. Liegt ein solcher Lambda-Ausdruck vor, wird von einer Projektion gesprochen. Die folgende Anweisung zeigt eine solche. Dabei wird eine Zeichenfolge übergeben und deren Länge geprüft. Der Rückgabewert ist vom Typ Integer.


(str) => str.Length

Ein Prädikat hingegen liefert einen booleschen Wert als Ergebnis einer Operation:


(alter) => alter > 65



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen. >> Zum Feedback-Formular
<< zurück
  Zum Katalog
Zum Katalog: Visual C# 2010

Visual C# 2010
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Professionell entwickeln mit Visual C# 2012






 Professionell
 entwickeln mit
 Visual C# 2012


Zum Katalog: Windows Presentation Foundation






 Windows Presentation
 Foundation


Zum Katalog: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Katalog: C++ Handbuch






 C++ Handbuch


Zum Katalog: C/C++






 C/C++


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2010
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern