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

Inhaltsverzeichnis
Vorwort zur 6. Auflage
1 Allgemeine Einführung in .NET
2 Grundlagen der Sprache C#
3 Das Klassendesign
4 Vererbung, Polymorphie und Interfaces
5 Delegates und Ereignisse
6 Strukturen und Enumerationen
7 Fehlerbehandlung und Debugging
8 Auflistungsklassen (Collections)
9 Generics – Generische Datentypen
10 Weitere C#-Sprachfeatures
11 LINQ
12 Arbeiten mit Dateien und Streams
13 Binäre Serialisierung
14 XML
15 Multithreading und die Task Parallel Library (TPL)
16 Einige wichtige .NET-Klassen
17 Projektmanagement und Visual Studio 2012
18 Einführung in die WPF und XAML
19 WPF-Layout-Container
20 Fenster in der WPF
21 WPF-Steuerelemente
22 Elementbindungen
23 Konzepte von WPF
24 Datenbindung
25 Weitere Möglichkeiten der Datenbindung
26 Dependency Properties
27 Ereignisse in der WPF
28 WPF-Commands
29 Benutzerdefinierte Controls
30 2D-Grafik
31 ADO.NET – Verbindungsorientierte Objekte
32 ADO.NET – Das Command-Objekt
33 ADO.NET – Der SqlDataAdapter
34 ADO.NET – Daten im lokalen Speicher
35 ADO.NET – Aktualisieren der Datenbank
36 Stark typisierte DataSets
37 Einführung in das ADO.NET Entity Framework
38 Datenabfragen des Entity Data Models (EDM)
39 Entitätsaktualisierung und Zustandsverwaltung
40 Konflikte behandeln
41 Plain Old CLR Objects (POCOs)
Stichwort

Download:
- Beispiele, ca. 62,4 MB

Buch bestellen
Ihre Meinung?

Spacer
Visual C# 2012 von Andreas Kühnel
Das umfassende Handbuch
Buch: Visual C# 2012

Visual C# 2012
Rheinwerk Computing
1402 S., 6., aktualisierte und erweiterte Auflage 2013, geb., mit DVD
49,90 Euro, ISBN 978-3-8362-1997-6
Pfeil 10 Weitere C#-Sprachfeatures
Pfeil 10.1 Implizit typisierte Variablen
Pfeil 10.2 Anonyme Typen
Pfeil 10.3 Lambda-Ausdrücke
Pfeil 10.3.1 Projektion und Prädikat
Pfeil 10.4 Erweiterungsmethoden
Pfeil 10.5 Partielle Methoden
Pfeil 10.5.1 Wo partielle Methoden eingesetzt werden
Pfeil 10.6 Operatorüberladung
Pfeil 10.6.1 Einführung
Pfeil 10.6.2 Die Syntax der Operatorüberladung
Pfeil 10.6.3 Die Operatorüberladungen im Projekt »GeometricObjectsSolution«
Pfeil 10.6.4 Die Operatoren »true« und »false« überladen
Pfeil 10.6.5 Benutzerdefinierte Konvertierungen
Pfeil 10.7 Indexer
Pfeil 10.7.1 Überladen von Indexern
Pfeil 10.7.2 Parameterbehaftete Eigenschaften
Pfeil 10.8 Attribute
Pfeil 10.8.1 Das »Flags«-Attribut
Pfeil 10.8.2 Benutzerdefinierte Attribute
Pfeil 10.8.3 Attribute auswerten
Pfeil 10.8.4 Festlegen der Assembly-Eigenschaften in »Assembly-Info.cs«
Pfeil 10.9 Dynamisches Binden
Pfeil 10.9.1 Eine kurze Analyse
Pfeil 10.9.2 Dynamische Objekte
Pfeil 10.10 Unsicherer (unsafe) Programmcode – Zeigertechnik in C#
Pfeil 10.10.1 Einführung
Pfeil 10.10.2 Das Schlüsselwort »unsafe«
Pfeil 10.10.3 Die Deklaration von Zeigern
Pfeil 10.10.4 Die »fixed«-Anweisung
Pfeil 10.10.5 Zeigerarithmetik
Pfeil 10.10.6 Der Operator »->«

Galileo Computing - Zum Seitenanfang

10.9 Dynamisches BindenZur nächsten Überschrift

Seit der Version 4.0 hat C# auch die Fähigkeit, das sogenannte späte Binden zu realisieren. Was ist darunter zu verstehen? Schauen wir uns dazu einmal das folgende Beispiel an:

class Program {
static void Main(string[] args) {
Mathematics math = new Mathematics();
long result = math.Addition(56, 88);
}
}

class Mathematics {
public long Addition(int x, int y) {
return x + y;
}
}

Listing 10.49 Statisches Binden

Die Klasse Mathematics wird instanziiert, ein statischer Vorgang, der bereits zur Kompilierzeit durchgeführt wird.

Mit Hilfe der Reflection ließ sich ein solcher Aufruf auch früher schon dynamisch formulieren, wie das folgende Listing zeigt.

object math = new Mathematics();
Type mathType = math.GetType();
object obj = mathType.InvokeMember("Addition",
BindingFlags.InvokeMethod,
null,
math,
new object[] { 56, 88 });
long result = (long)obj;

Listing 10.50 Dynamisches Binden mit der Reflection

Das Listing setzt voraus, dass der Namespace System.Reflection mit using bekannt gegeben worden ist.

Das Resultat des Konstruktoraufrufs von Mathematics wird einer Variablen vom Typ Object zugewiesen. Darauf besorgt man sich den Type des Objekts und ruft darauf die Methode InvokeMember auf. Unter Übergabe des Methodenbezeichners, des Elementtyps, der Referenz des abzurufenden Objekts und der Argumente für den Methodenaufruf wird ein Resultat gebildet, das am Ende nur noch in den Ergebnistyp long konvertiert werden muss.

Dieses Coding lässt sich unter Zuhilfenahme des Schlüsselworts dynamic auch deutlich kürzer ausdrücken:

dynamic obj = new Mathematics();
long result = obj.Addition(56, 88);

Listing 10.51 Dynamisches Binden mit »dynamic«

Das dynamic-Schlüsselwort wird zur Kompilierzeit statisch geprüft. Die Methode Addition hingegen ist dynamisch und wird nicht zur Kompilierzeit geprüft. Natürlich werden Sie auch keine IntelliSense-Hilfe nach dem Punktoperator nutzen können, Sie müssen die Methode Addition manuell angeben.

Bei obj handelt es sich um ein dynamisches Objekt, der Aufruf der Methode selbst ist dynamisch und wird erst zur Laufzeit geprüft.


Galileo Computing - Zum Seitenanfang

10.9.1 Eine kurze AnalyseZur nächsten ÜberschriftZur vorigen Überschrift

Lassen Sie uns an dieser Stelle eine Betrachtung hinsichtlich der Objektvariablen durchführen und diese direkt miteinander vergleichen. Sie kennen mit dem in diesem Abschnitt beschriebenen Schlüsselwort dynamic inzwischen drei Varianten:

  • Object myObject = new Mathematics();
  • var myObject = new { [...] };
  • dynamic myObject = new Mathematics();

Die zuerst aufgeführte Instanziierung deklariert eine Variable vom Typ Mathematics. Die Variable ist vom Typ Object, der Code ist streng typisiert. Sie können der Variablen jedes Objekt zuweisen, vorausgesetzt, es ist vom Typ Object und bekannt.

Flexibler ist bereits der zweite Ausdruck. Auch hier liegt eine strenge Typisierung vor, aber der Typ muss erst zur Laufzeit gebildet werden. Typischerweise handelt es sich dabei um anonyme Typen, die zur Kompilierzeit gebildet werden.

Auch die letzte Variante mit dynamic wird sehr wohl auch statisch geprüft, aber der Aufruf auf die dynamic-Variable erfolgt dynamisch. Zur Kompilierzeit steht noch nicht fest, welche Operationen mit dem Typ ausgeführt werden. Daher ist auch keine IntelliSense-Hilfe sichtbar.


Galileo Computing - Zum Seitenanfang

10.9.2 Dynamische ObjekteZur vorigen Überschrift

Mit der Einführung des Schlüsselworts dynamic wurden auch einige Klassen zum .NET Framework hinzugefügt, die auf dynamic aufsetzen. Diese Klassen befinden sich im Namespace System.Dynamic. Am interessantesten scheint hier die Klasse DynamicObject zu sein, mit der Klassen zur Laufzeit dynamisch erweitert werden können. Sie müssen die Klasse ableiten und können die abgeleitete Klasse zur Laufzeit um Objekteigenschaften erweitern und diese abrufen. Sehen wir uns das im folgenden Beispielprogramm an.

// Beispiel: ..\Kapitel 10\DynamicObjects

using System;
using System.Dynamic;
using System.Collections.Generic;
using System.Reflection;

class Program {
static void Main(string[] args) {
dynamic pers = new Person();
pers.Name = "Peter";
pers.Alter = 12;
pers.Ort = "Bonn";
pers.Telefon = 0181812345;
Console.WriteLine("{0}, {1}, {2}, {3}", pers.Name, pers.Alter, pers.Ort,
pers.Telefon);
Console.ReadLine();
}
}

class Person : DynamicObject {
Dictionary<string, Object> dic = new Dictionary<string, object>();
public string Name { get; set; }
public int Alter { get; set; }

public override bool TryGetMember(GetMemberBinder binder,
out object result)
{
return dic.TryGetValue(binder.Name, out result);
}

public override bool TrySetMember(SetMemberBinder binder, object value) {
dic[binder.Name] = value;
return true;
}
}

Listing 10.52 Dynamische Objekte

Es ist die Klasse Person definiert, die die Klasse DynamicObject ableitet. Mit Name und Alter sind zwei Eigenschaften konkret festgelegt. Darüber hinaus enthält die Klasse Person ein Feld vom Typ der generischen Klasse Dictionary<>. Hierbei handelt es sich um eine generische Collection, in der alle Daten mit Hilfe eines Schlüssel-Werte-Paares beschrieben werden.

Das Dictionary<>-Objekt speichert Eigenschaften, die zur Laufzeit festgelegt werden. In Main sind das zum Beispiel die beiden Eigenschaften Ort und Telefon eines Person-Objekts, das zuvor mit dynamic erstellt wird – eine Voraussetzung für alle Typen, die von DynamicObject abgeleitet sind.

Damit die dynamischen Eigenschaften sich auch in das Objekt eintragen können, sind die beiden geerbten Methoden TrySetMember und TryGetMember überschrieben. Beide weisen mit GetMemberBinder und SetMemberBinder sehr ähnliche erste Parameter auf, die den dynamischen Member repräsentieren. Der Bezeichner der dynamischen Eigenschaft ist in der Eigenschaft Name der beiden Binding-Objekte zu finden.

Interessant werden dürfte die Klasse DynamicObject vermutlich in Zukunft im Zusammenhang mit Daten, deren Strukturen nicht vorhersehbar sind oder sich von Fall zu Fall ändern. In diesem Zusammenhang sei an die Tabellen einer Datenbank erinnert. Wie einfach ließen sich die Felder durch dynamische Member eines DynamicObject-Objekts beschreiben?



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# 2012

Visual C# 2012
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 2013
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.


[Rheinwerk Computing]

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