E-Book, Deutsch, 1247 Seiten
Reihe: Rheinwerk Computing
Kühnel / Deitelhoff C# mit .NET
9. Auflage 2025
ISBN: 978-3-367-11269-2
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection
Das umfassende Handbuch
E-Book, Deutsch, 1247 Seiten
Reihe: Rheinwerk Computing
ISBN: 978-3-367-11269-2
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection
Der ideale Begleiter für Ihre tägliche Arbeit mit C# und .NET! Von den Sprachgrundlagen über LINQ und asynchrone Programmierung bis zur Erstellung komplexer GUI-Anwendungen mit XAML und der Anbindungen von Datenbanken und KI ist alles dabei. Dieses umfassende Handbuch führt Sie professionell durch die Praxis!
Aus dem Inhalt:
- Das erste Projekt aufsetzen
- Schleifen, Variablen, Methoden und mehr
- .NET kennenlernen
- Asynchron mit async/await und TPL
- LINQ
- Datenbankanbindung
- Cloud-Entwicklung mit Azure
- Cross-Plattform mit XAML
- 2D-Grafik
- Entity Framework
- Einführung in KI mit .NET
- Unit-Tests und Versionskontrolle
Autoren/Hrsg.
Weitere Infos & Material
Materialien zum Buch ... 30
Über diese Auflage ... 31
1. Allgemeine Einführung in .NET ... 33
1.1 ... Warum .NET? ... 33
1.2 ... .NET unter die Lupe genommen ... 39
1.3 ... Assemblies ... 51
1.4 ... Die Entwicklungsumgebung ... 53
1.5 ... Git -- Versionskontrolle leicht gemacht ... 62
2. Grundlagen der Sprache C# ... 67
2.1 ... Konsolenanwendungen ... 67
2.2 ... Grundlagen der C#-Syntax ... 74
2.3 ... Variablen und Datentypen ... 79
2.4 ... Operatoren ... 105
2.5 ... Datenfelder (Arrays) ... 118
2.6 ... Kontrollstrukturen ... 127
2.7 ... Programmschleifen ... 138
3. Das Klassendesign ... 155
3.1 ... Einführung in die Objektorientierung ... 155
3.2 ... Die Klassendefinition ... 158
3.3 ... Referenz- und Wertetypen ... 166
3.4 ... Die Eigenschaften eines Objekts ... 167
3.5 ... Methoden eines Objekts ... 176
3.6 ... Konstruktoren ... 204
3.7 ... Der Destruktor ... 211
3.8 ... Konstanten in einer Klasse ... 212
3.9 ... Statische Klassenkomponenten ... 214
3.10 ... Namensräume (Namespaces) ... 221
3.11 ... Aktueller Stand der Klasse »Circle« ... 232
4. Vererbung, Polymorphie und Interfaces ... 235
4.1 ... Die Vererbung ... 235
4.2 ... Der Problemfall geerbter Methoden ... 244
4.3 ... Typkonvertierung und Typuntersuchung von Objektvariablen ... 251
4.4 ... Polymorphie ... 257
4.5 ... Weitere Gesichtspunkte der Vererbung ... 265
4.6 ... Das Projekt »GeometricObjectsSolution« ergänzen ... 268
4.7 ... Eingebettete Klassen ... 272
4.8 ... Interfaces (Schnittstellen) ... 272
4.9 ... Das Zerstören von Objekten -- der Garbage Collector ... 292
4.10 ... Die Ergänzungen in den Klassen »Circle« und »Rectangle« ... 299
5. Delegaten, Ereignisse und Lambda-Ausdrücke ... 301
5.1 ... Delegaten ... 301
5.2 ... Ereignisse eines Objekts ... 311
5.3 ... Lambda-Ausdrücke ... 328
5.4 ... Änderungen im Projekt »GeometricObjectsSolution« ... 334
6. Strukturen, Records und Enumerationen ... 339
6.1 ... Strukturen -- eine Sonderform der Klassen ... 339
6.2 ... Datensatztypen -- Klassen mit Standards ... 348
6.3 ... Klassen, Strukturen oder Records? ... 352
6.4 ... Enumerationen (Aufzählungen) ... 355
6.5 ... Boxing und Unboxing ... 357
7. Fehlerbehandlung und Debugging ... 359
7.1 ... Laufzeitfehler erkennen ... 360
7.2 ... Debuggen mit Programmcode ... 383
7.3 ... Fehlersuche mit Visual Studio ... 391
8. Auflistungsklassen (Collections) ... 399
8.1 ... Collections im Namespace »System.Collections« ... 399
8.2 ... Die Klasse »ArrayList« ... 403
8.3 ... Die Klasse »Hashtable« ... 415
8.4 ... Die Klassen »Queue« und »Stack« ... 421
8.5 ... Eigene Auflistungen mit »yield« durchlaufen ... 424
8.6 ... Collection Expressions ... 427
9. Generics -- generische Datentypen ... 429
9.1 ... Bereitstellen einer generischen Klasse ... 431
9.2 ... Bedingungen (Constraints) festlegen ... 434
9.3 ... Generische Methoden ... 438
9.4 ... Generische Attribute ... 439
9.5 ... Generics und Vererbung ... 441
9.6 ... Typkonvertierung von Generics ... 443
9.7 ... Generische Delegaten ... 444
9.8 ... »Nullable«-Typen ... 445
9.9 ... Generische Collections ... 447
9.10 ... Kovarianz und Kontravarianz generischer Typen ... 452
9.11 ... Generische Mathematik ... 457
9.12 ... Ergänzungen im Beispielprojekt »GeometricObjectsSolution« ... 459
10. Weitere C#-Sprachfeatures ... 461
10.1 ... Implizit typisierte Variablen ... 461
10.2 ... Anonyme Typen ... 462
10.3 ... Erweiterungsmethoden ... 463
10.4 ... Spezielle Methoden ... 467
10.5 ... Operatorüberladung ... 474
10.6 ... »Nullable«-Referenztypen ... 485
10.7 ... Die »with«-Anweisung ... 490
10.8 ... Indexer ... 491
10.9 ... Attribute ... 498
10.10 ... Der bedingte NULL-Operator ... 511
10.11 ... Der »nameof«-Operator ... 513
10.12 ... Dynamisches Binden ... 514
10.13 ... Tupel ... 518
10.14 ... Pattern Matching (Musterabgleich) ... 523
10.15 ... Rückgabewerte mit »ref« ... 529
10.16 ... Unsicherer (unsafe) Programmcode -- Zeigertechnik in C# ... 532
11. LINQ -- Language Integrated Query ... 539
11.1 ... Einstieg in LINQ ... 539
11.2 ... LINQ to Objects ... 545
11.3 ... Die Abfrageoperatoren ... 549
12. Arbeiten mit Dateien und Streams ... 575
12.1 ... Einführung ... 575
12.2 ... Namespaces der Ein- bzw. Ausgabe ... 576
12.3 ... Laufwerke, Verzeichnisse und Dateien ... 577
12.4 ... Die »Stream«-Klassen ... 594
12.5 ... Die Klassen »TextReader« und »TextWriter« ... 606
12.6 ... Die Klassen »BinaryReader« und »BinaryWriter« ... 612
12.7 ... Serialisierung ... 621
13. Multithreading ... 631
13.1 ... Einführung in das Multithreading ... 632
13.2 ... Threads -- allgemein betrachtet ... 633
13.3 ... Mit der Klasse »Thread« arbeiten ... 635
13.4 ... Der Threadpool ... 647
13.5 ... Synchronisation von Threads ... 648
13.6 ... Grundlagen asynchroner Methodenaufrufe ... 673
14. Die Task Parallel Library (TPL) und das Task-based Async Pattern (TAP) ... 687
14.1 ... Die wichtigsten Klassen der TPL ... 688
14.2 ... Die Klasse »Task« ... 688
14.3 ... Die Klasse »Parallel« ... 701
14.4 ... Asynchrone Programmierung mit »async« und »await« ... 708
15. Grundlegende .NET-Klassen ... 715
15.1 ... Die Klasse »Object« ... 715
15.2 ... Die Klasse »String« ... 721
15.3 ... Die Klasse »StringBuilder« ... 736
15.4 ... Der Typ »DateTime« ... 742
15.5 ... Die Klasse »TimeSpan« ... 747
15.6 ... Die Klassen »DateOnly« und »TimeOnly« ... 750
15.7 ... Ausgabeformatierung ... 751
16. Einführung in das Entity Framework Core ... 761
16.1 ... Was ist das Entity Framework Core? ... 761
16.2 ... Grundkonzepte und Projekt-Setup von EF Core ... 767
16.3 ... Unser erstes Projekt ... 772
16.4 ... Datenabfragen mit LINQ ... 783
16.5 ... Weitere Datenbankzugriffe ... 786
16.6 ... Eager, Lazy und Explicit Loading ... 791
16.7 ... Modellierung von Beziehungen ... 794
16.8 ... Die Arbeit mit Migrationen ... 802
16.9 ... Data Seeding und Datenbankinitialisierung ... 806
16.10 ... Modellierung von Vererbung und Polymorphie ... 809
16.11 ... Performance und Tuning ... 813
16.12 ... EF Core und moderne .NET-Features ... 815
17. Desktop- und Cross-Platform-Entwicklung ... 819
17.1 ... WinForms, WPF und .NET MAUI -- ein Vergleich ... 819
17.2 ... Und was ist mit der UWP und WinUI 3? ... 821
17.3 ... XAML (Extended Application Markup Language) ... 823
17.4 ... Grundkonzepte von Windows Forms (WinForms) ... 840
18. Windows Presentation Foundation ... 845
18.1 ... Eine WPF-Anwendung und ihre Dateien ... 845
18.2 ... Fenster in der WPF ... 847
18.3 ... Nachrichtenfenster mit »MessageBox« ... 848
18.4 ... Standarddialoge in der WPF ... 850
18.5 ... Die WPF-Layoutcontainer ... 850
18.6 ... WPF-Steuerelemente ... 857
18.7 ... Ereignisse in der WPF ... 866
18.8 ... Die Ereignishandler ... 870
18.9 ... WPF-Datenbindung und WPF-Commands ... 873
18.10 ... Die Klasse »Binding« ... 876
18.11 ... WPF-Commands ... 887
18.12 ... »RoutedCommand«-Objekte und »CommandBindings« ... 898
18.13 ... Das MVVM-Pattern ... 902
19. Einführung in .NET MAUI ... 911
19.1 ... Was ist .NET MAUI? ... 911
19.2 ... Architektur von .NET MAUI im Kontext von .NET ... 913
19.3 ... Struktur eines MAUI-Projekts ... 914
19.4 ... Eine erste Anwendung ... 921
19.5 ... Zentrale Konzepte ... 925
19.6 ... Datenbindung und MVVM mit .NET MAUI ... 932
19.7 ... Plattformunabhängigkeit und plattformspezifischer Code ... 940
19.8 ... Debugging und Deployment ... 942
20. 2D-Grafik in WPF und .NET MAUI ... 945
20.1 ... Shapes ... 945
20.2 ... »Path«-Elemente ... 949
20.3 ... »Brush«-Objekte ... 953
20.4 ... 2D-Grafik in .NET MAUI ... 965
21. Komponententests (Unit-Tests) ... 967
21.1 ... Was ist ein Unit-Test? ... 967
21.2 ... Ein erster Komponententest ... 970
21.3 ... Komponententest schreiben und ausführen ... 977
21.4 ... Die Klasse »TestContext« ... 995
21.5 ... Data-Driven Unit-Tests (datengetriebene Tests) ... 998
21.6 ... Lebenszyklus-Attribute ... 1011
21.7 ... Testen mit »Assert« ... 1016
21.8 ... Test-Driven Development -- TDD ... 1025
22. Einführung in ASP.NET Core ... 1027
22.1 ... Was ist ASP.NET Core? ... 1027
22.2 ... Web-API-Projektstruktur und erste Schritte ... 1032
22.3 ... Minimal APIs vs. klassische Controller-Architektur ... 1040
22.4 ... Routing und Middleware ... 1047
22.5 ... Dependency Injection ... 1054
22.6 ... Konfiguration und Umgebungen ... 1057
22.7 ... Entity Framework Core Integration ... 1061
22.8 ... Authentifizierung und Autorisierung ... 1068
22.9 ... Fehlerbehandlung und Logging ... 1072
22.10 ... OpenAPI/Swagger ... 1076
22.11 ... Deployment und Hosting ... 1081
22.12 ... Unit-Testing von ASP.NET-Core-Anwendungen ... 1085
23. Einführung in Blazor ... 1089
23.1 ... Was ist Blazor? ... 1089
23.2 ... Wie funktioniert Blazor? ... 1093
23.3 ... Projektstruktur und Build-System ... 1096
23.4 ... Blazor-Komponenten im Detail ... 1106
23.5 ... Routing und Navigation ... 1110
23.6 ... Datenbindung und Formulare ... 1114
23.7 ... State Management ... 1118
23.8 ... Interop mit JavaScript ... 1122
23.9 ... Zugriff auf APIs und Backend ... 1125
23.10 ... Blazor Hybrid für den Desktop ... 1129
23.11 ... Fortgeschrittene Themen ... 1132
24. Cloud-Entwicklung mit Azure ... 1135
24.1 ... Was ist Microsoft Azure? ... 1135
24.2 ... Überblick über Cloud-Computing ... 1136
24.3 ... Cloud-Service-Modelle: PaaS, IaaS, und SaaS ... 1138
24.4 ... Vorteile der Cloud-Entwicklung mit Azure ... 1141
24.5 ... Azure-Ressourcenmanagement und -Architektur ... 1142
24.6 ... Schlüsseldienste: Azure Compute, Storage, Databases und KI ... 1147
24.7 ... Azure CLI und Azure PowerShell ... 1152
24.8 ... Azure SDKs für .NET ... 1155
24.9 ... Nutzung des Azure-Portals ... 1159
24.10 ... Azure SQL Database und Cosmos DB ... 1159
24.11 ... Azure Blob Storage ... 1164
24.12 ... Azure Functions und Logic Apps ... 1167
24.13 ... Azure Monitor und Application Insights ... 1172
24.14 ... Einrichten von Azure DevOps ... 1176
25. Softwareentwicklung in Zeiten von KI ... 1179
25.1 ... Warum KI in der Softwareentwicklung? ... 1179
25.2 ... Grundlagen der künstlichen Intelligenz ... 1180
25.3 ... KI-Plattformen und Tools von Microsoft ... 1185
25.4 ... Machine Learning mit ML.NET ... 1189
25.5 ... Azure AI Services und Azure OpenAI in C# nutzen ... 1198
25.6 ... Generative KI nutzen ... 1204
25.7 ... Microsoft.Extensions.AI und Microsoft.Extensions.VectorData ... 1214
25.8 ... Einsatz von KI in der Softwareentwicklung selbst ... 1218
25.9 ... Ethik, Datenschutz und Verantwortung in der KI-Entwicklung ... 1227
25.10 ... Best Practices und typische Fallstricke ... 1229
Index ... 1233
1 Allgemeine Einführung in .NET
Mit diesem Buch möchten wir sowohl Leserinnen und Leser ansprechen, die schon Grundlagenkenntnisse mitbringen und zum Beispiel programmieren können oder Informatik studieren, als auch solche, die mit dem Programmieren gerade anfangen.
Als Dozenten und Trainer sind uns beide Aufgaben ans Herz gewachsen. Wir mögen die Herausforderung, für heterogene Gruppen mit unterschiedlichen Lernstilen und Vorkenntnissen zu arbeiten, und finden es wichtig, eine Atmosphäre zu schaffen, die Motivation und Neugierde fördert.
Genau hier setzt auch dieses Buch an. Wir möchten sowohl erfahrene Leser ansprechen als auch Anfängern den Einstieg erleichtern, indem wir eine Brücke zwischen den unterschiedlichen Wissenswelten schlagen. Vielleicht wissen Sie noch nicht, was sich hinter .NET verbirgt? Vielleicht haben Sie sich für dieses Buch entschieden, ohne die Tragweite Ihres Entschlusses für .NET zu kennen. Wir möchten Ihnen das zunächst einmal erläutern.
Mit .NET 5 hat Microsoft die Entwicklungslinien von .NET Framework und .NET Core unter einer gemeinsamen Plattform zusammengeführt. Es gibt seither nur noch .NET, oft auch .NET 5+ genannt. Das klassische .NET Framework, zuletzt in Version 4.8 erschienen, wird weiter gepflegt, aber nicht mehr aktiv weiterentwickelt. Der Fokus liegt jetzt auf dem plattformübergreifenden .NET, das Windows, Linux, macOS sowie mobile Plattformen (über MAUI) unterstützt.
1.1 Warum .NET?
Lesern mit fundierten Grundlagenkenntnissen eine Thematik näherzubringen, die nicht nur ihr Interesse weckt, sondern ihnen auch neue Erkenntnisse vermittelt, ist eine anspruchsvolle Aufgabe. Gleichzeitig Programmieranfänger behutsam an die abstrakte Denkweise der Programmlogik heranzuführen und ihnen die Freude am Lernen zu bewahren, erfordert Fingerspitzengefühl, Geduld und methodisches Geschick.
Als Dozent und Trainer mit langjähriger Erfahrung in der Erwachsenenbildung haben wir es uns zur Aufgabe gemacht, gerade Anfänger auf ihrem Weg in die Welt des Programmierens zu begleiten. Die Herausforderungen von heterogenen Gruppen mit unterschiedlichen Vorkenntnissen und Lernstilen haben gezeigt, wie wichtig es ist, komplexe Inhalte auf einfache, nachvollziehbare Weise zu vermitteln und gleichzeitig eine Atmosphäre zu schaffen, die Motivation und Neugierde fördert.
Doch werfen wir zunächst einen Blick zurück in die 90er Jahre: Anwendungen wurden vor allem für Desktop-PCs entwickelt, während Netzwerke noch in den Kinderschuhen steckten. Grafische Benutzeroberflächen etablierten sich langsam, und das Internet war ein Nischenphänomen für einen begrenzten Nutzerkreis. Die rasante Hardwareentwicklung sorgte zudem dafür, dass ein High-End-PC von 1990 oft schon nach wenigen Jahren veraltet war.
Mit den 2000er und 2010er Jahren änderte sich das Bild grundlegend: Das Internet wurde zum zentralen Treiber der Softwareentwicklung, und die Verbreitung mobiler Geräte wie Smartphones und Tablets schuf neue Plattformen. Anwendungen verlagerten sich in die Cloud, und mobile Apps prägten den Alltag. Diese Transformation markierte den Übergang von isolierten Desktop-Anwendungen hin zu vernetzten, plattformübergreifenden Lösungen. Mittlerweile bahnt sich die nächste Weiterentwicklung an, die eher wie eine Revolution und nicht wie eine Evolution daherkommt: Durch den Einsatz von künstlicher Intelligenz werden praktisch alle Lebensbereiche beeinflusst. Die IT und Softwareentwicklung sowie die Nutzung von Software bleiben davon nicht unberührt.
Die IT-Welt hat sich seitdem grundlegend verändert – nicht nur in Bezug auf Software und Hardware, sondern auch in der Art und Weise, wie Software entwickelt wird. In den 90er Jahren prägten proprietäre Entwicklungsumgebungen wie Borlands Delphi oder Microsofts Visual Basic die Szene, während Puristen oft auf C oder C++ setzten.
Mit dem Aufkommen des Internets verlagerte sich der Fokus zunehmend auf die Webentwicklung. Neue Technologien wie HTML, CSS und JavaScript ermöglichten plattformunabhängige Anwendungen, die direkt im Browser liefen, und legten den Grundstein für moderne web- und cloud-basierte Lösungen. Und mittendrin sind aktuell Sprachen wie Python, die aufgrund der KI-Entwicklungen und hohen Datenberge nicht mehr aus der Softwarelandschaft wegzudenken sind.
Die Vielfalt betraf jedoch nicht nur die Entwicklung der Software. Immer neue Plattformen, angepasst an den jeweils aktuellen Trend der Zeit, eroberten den Markt und verschwanden nicht selten auch schnell wieder. Die Unternehmensnetzwerke mussten mit der stürmischen Entwicklung Schritt halten, wurden komplexer und komplizierter und öffneten sich zunehmend auch der Welt nach außen.
Kluge Köpfe erkannten auch sehr schnell, dass die Spezifikationen des Internets sich auch dazu eignen, mehrere Unternehmen zu koppeln. Damit wurde die Grundlage dafür geschaffen, dass Sie heute im Reisebüro oder im Internetbrowser eine Reise buchen können, die nicht nur den Flug, sondern gleichzeitig eine gültige Hotelzimmerbuchung, vielleicht sogar samt Mietwagen, umfasst – obwohl hierzu schon drei Informationsquellen mit unterschiedlicher Software abgezapft werden müssen: ein nicht ganz einfaches Unterfangen, wenn Sie bedenken, dass möglicherweise die Schnittstellen, über die die verschiedenen Komponenten sich zwangsläufig austauschen müssen, nicht einheitlich definiert sind.
Bei dieser rasanten Entwicklung der Möglichkeiten, Daten auszutauschen oder auch nur weiterzuleiten, sollten Sie nicht vergessen, dass auch die Hardware eine ähnliche Entwicklung genommen hat. Ein Smartphone besitzen heutzutage schon die meisten schulpflichtigen Kinder, und der mobile Sektor entwickelt sich immer noch dramatisch schnell. Ein Ende dieser Spirale ist derzeit nicht zu erkennen.
An der Schnittstelle all dieser Vielfältigkeit stehen die Entwickler – was nutzen die beste Hardware und die ausgeklügelten Spezifikationen, wenn die Bits sich nicht den Weg von einem zum anderen Endpunkt bahnen? Für diesen Bitfluss wollen Sie als Entwickler oder Entwicklerin sorgen. Damit fangen aber wegen der oben erwähnten Vielgestaltigkeit der IT-Welt die Probleme an: verschiedene Plattformen, unterschiedliche Programmiersprachen, mehrere Klassenbibliotheken, eine Vielzahl an Spezifikationen usw.
Einen ersten Schritt in Richtung Vereinheitlichung beschritt die Firma Sun mit Java. Der Erfolg, den diese plattformunabhängige Sprache hatte und auch immer noch hat, war auch ein Zeichen für Microsoft, um das Entwicklerterrain zu kämpfen. Nach einer eingehenden Analyse der Anforderungen, die gegen Ende der 90er Jahre an die damalige Software gestellt wurden, sowie einer Trendanalyse der Folgejahre wurde das .NET Framework entwickelt. Dabei konnte Microsoft die »Gunst der späten Stunde« nutzen und die Nachteile und Schwachpunkte, die jedes Produkt, also auch Java, hat, durch neue Ideen ausmerzen.
Nein, .NET ist natürlich auch kein Heilsbringer und wird sicherlich nicht die Menschheit überdauern. Aber nach heutigen Maßstäben ist .NET ein effizientes Framework, in dessen Mittelpunkt die .NET-Klassenbibliothek steht. Diese bietet Ihnen alles, was Sie zum Entwickeln brauchen – egal, ob es sich um eine einfache Anwendung handelt, die nur ein paar Daten anzeigt, oder um eine Unternehmensanwendung großen Stils. Sie können Desktop-Anwendungen genauso erstellen wie eine hochkomplexe Internetanwendung, egal, ob als recht einfache Webanwendung oder direkt in der Cloud. Sie können die Microsoft-Office-Produkte damit programmieren, fremde Datenquellen anzapfen, Programme für Ihr Smartphone schreiben und vieles mehr. Dazu müssen Sie sich nicht immer wieder in neue Programmiersprachen und neue Entwicklungsumgebungen einarbeiten, denn alles ist wie aus einem Guss.
Es wäre falsch zu behaupten, dass die Entwicklung anspruchsvoller Anwendungen mit tollen Features kinderleicht ist – die .NET-Klassenbibliothek ist dafür schlichtweg zu umfangreich. Dennoch ermöglicht sie Ihnen, sich auf das Wesentliche zu konzentrieren: Sie arbeiten unabhängig vom Typ der Anwendung in einer konsistenten Umgebung, etwa mit Visual Studio, Visual Studio Code oder JetBrains Rider. Dabei können Sie auf bereits erworbene Kenntnisse aufbauen, ohne ständig neue Programmiersprachen lernen zu müssen. Zudem erhalten Sie leistungsstarke Werkzeuge, um einfach mit anderen Anwendungen zu kommunizieren, sofern diese gängige Standards einhalten.
Eine Funktionssammlung oder Klassenbibliothek ist nur so gut, wie sie auch zukünftige Anforderungen bedienen kann. Dass .NET hier architektonisch den richtigen Weg beschritten hat, beweist die derzeit aktuelle Version 9 des .NET Frameworks und die Version 13 der Programmiersprache C#. Diese Versionen bringen zahlreiche Verbesserungen mit sich, darunter Leistungsoptimierungen, erweiterte Funktionalitäten und verbesserte Unterstützung für moderne Entwicklungsparadigmen.
Genau an dieser Stelle müssen wir ehrlich sein: Sie werden niemals alle Tiefen von .NET ergründen. Selbst als Personen, die seit der ersten Beta dabei sind, entdecken wir immer wieder überraschende Fähigkeiten in der .NET-Klassenbibliothek. Verabschieden Sie sich von der Vorstellung, jemals alle Klassen vollständig zu erfassen – die Bibliothek ist dafür einfach zu umfangreich und mächtig. Ein Überblick ist aber oft ausreichend, um einschätzen zu können, was .NET zu leisten vermag und wo es für die eigenen Anwendungsfälle zum Einsatz kommen kann.
1.1.1 Ein paar Worte zu diesem Buch
...




