paint-brush
C#: Von den Grundlagen zu fortgeschrittenen Techniken – Ein anfängerfreundlicher CheatSheetvon@ssukhpinder
3,465 Lesungen
3,465 Lesungen

C#: Von den Grundlagen zu fortgeschrittenen Techniken – Ein anfängerfreundlicher CheatSheet

von Sukhpinder Singh16m2024/03/24
Read on Terminal Reader

Zu lang; Lesen

Der umfassende C#-Spickzettel soll Entwicklern dabei helfen, wichtige Syntax und Konzepte im Zusammenhang mit der C#-Programmierung zu beherrschen.
featured image - C#: Von den Grundlagen zu fortgeschrittenen Techniken – Ein anfängerfreundlicher CheatSheet
Sukhpinder Singh HackerNoon profile picture
0-item
1-item
2-item

Der umfassende C#-Spickzettel soll Entwicklern dabei helfen, wichtige Syntax und Konzepte im Zusammenhang mit der C#-Programmierung zu beherrschen.

Inhalt

  1. Grundstruktur
  2. Datentypen
  3. Variablen
  4. Konstanten
  5. Bedingte Anweisungen
  6. Schleifen
  7. Arrays
  8. Listen
  9. Wörterbücher
  10. Methoden
  11. Klassen und Objekte
  12. Ausnahmebehandlung
  13. Delegierte, Veranstaltungen und Lambdas
  14. LINQ (Sprachintegrierte Abfrage)
  15. Attribute
  16. Asynchron/Warten
  17. Verschiedenes
  18. String-Manipulation
  19. Datei-E/A
  20. Terminzeit
  21. Generika
  22. Nullwerte
  23. Attribute & Reflexion
  24. Erweiterungsmethoden
  25. Abhängigkeitsspritze
  26. Teilklassen
  27. Interoperabilität
  28. Anonyme Typen
  29. Tupel
  30. Mustervergleich
  31. Lokale Funktionen
  32. Aufzeichnungen
  33. mit Ausdrücken
  34. Indexer und Bereiche
  35. mit Deklaration
  36. Nullable Reference Types (NRTs)
  37. Musterbasierte Verwendung
  38. Eigenschaftsmuster
  39. Standardschnittstellenimplementierungen
  40. Dynamische Bindung

1. Grundstruktur

Alle C#-Programme folgen einer grundlegenden Struktur, die im Folgenden beschrieben wird:

 using System; public class HelloWorld { public static void Main(string[] args) { Console.WriteLine("Hello, World!"); } }


Ab .NET 5 vereinfachen Anweisungen der obersten Ebene den Inhalt von Program.cs:

 Console.WriteLine("Hello, World");

2. Datentypen

C# unterstützt verschiedene Datentypen wie:

  • Werttypen: int, char und float
  • Referenztypen: String, Klasse und Array

3. Variablen

Variablen sind symbolische Namen für Werte:

 int age = 30; // integer variable string name = "John"; // string variable double PI = 3.14159; // double for floating-point numbers bool isLoggedIn = true; // boolean variable

Verwenden Sie „var“ für die Typinferenz:

 var number = 5; // compiler infers type as int var message = "This is a message"; // compiler infers type as string

4. Konstanten

Konstanten enthalten unveränderliche Werte:

 const double GRAVITY = 9.81; // constant for gravitational acceleration const string COMPANY_NAME = "MyCompany"; // constant company name

5. Bedingte Anweisungen

Kontrollieren Sie den Programmablauf basierend auf Bedingungen:

 int age = 20; if (age >= 18) { Console.WriteLine("You are eligible to vote."); } else { Console.WriteLine("You are not eligible to vote."); } switch (variable) { /*...*/ } // Switch statement

6. Schleifen

Code wiederholt ausführen:

 for (int i = 1; i <= 5; i++) { Console.WriteLine(i); } foreach (var item in collection) { /*...*/ } // Foreach loop while (condition) { /*...*/ } // While loop do { /*...*/ } while (condition); // Do-while loop

7. Arrays

Elementsammlungen fester Größe:

 string[] names = new string[3] { "Alice", "Bob", "Charlie" }; Console.WriteLine(names[1]); // Output: Bob (accessing element at index 1)

8. Listen

Dynamische Sammlungen ähnlich wie Arrays:

 List<int> numbers = new List<int>(); numbers.Add(1); numbers.Add(2); numbers.Add(3); foreach (var number in numbers) { Console.WriteLine(number); }

9. Wörterbücher

Schlüssel-Wert-Paare für die Datenzuordnung:

 Dictionary<string, string> phonebook = new Dictionary<string, string>(); phonebook.Add("John Doe", "123-456-7890"); phonebook.Add("Jane Doe", "987-654-3210"); Console.WriteLine(phonebook["John Doe"]); // Output: 123-456-7890

10. Methoden

Kapseln Sie wiederverwendbare Logik:

 public class Rectangle { public double Width { get; set; } public double Height { get; set; } public double GetArea() { return Width * Height; } } public class Program { public static void Main(string[] args) { Rectangle rect = new Rectangle(); rect.Width = 5; rect.Height = 10; double area = rect.GetArea(); Console.WriteLine($"Area of rectangle: {area}"); } }

11. Klassen und Objekte

Klassen definieren Blaupausen für Objekte:

 public class MyClass // Class definition { public string PropertyName { get; set; } // Properties store data public void MethodName() { /*...*/ } // Methods define actions } MyClass obj = new MyClass(); // Object creation

12. Ausnahmebehandlung

Laufzeitfehler elegant verwalten:

 public static int GetNumberInput() { while (true) { try { Console.WriteLine("Enter a number: "); string input = Console.ReadLine(); return int.Parse(input); } catch (FormatException) { Console.WriteLine("Invalid input. Please enter a number."); } } } public static void Main(string[] args) { int number = GetNumberInput(); Console.WriteLine($"You entered: {number}"); }

13. Delegierte, Veranstaltungen und Lambda

Für ereignisgesteuerte Programmierung und Methodenhandhabung:

 public delegate void MyDelegate(); // Delegate declaration event MyDelegate MyEvent; // Event declaration public class Person { public string Name { get; set; } public int Age { get; set; } } public static void Main(string[] args) { List<Person> people = new List<Person>() { new Person { Name = "Alice", Age = 30 }, new Person { Name = "Bob", Age = 25 }, new Person { Name = "Charlie", Age = 40 }, }; people.Sort((p1, p2) => p1.Name.CompareTo(p2.Name)); foreach (var person in people) { Console.WriteLine(person.Name); // Output: Alice, Bob, Charlie (sorted by name) } }

14. LINQ (Sprachintegrierte Abfrage)

Abfragemöglichkeiten zur Datenmanipulation:

 using System.Linq; public static void Main(string[] args) { List<int> numbers = new List<int>() { 1, 2, 3, 4, 5, 6 }; var evenNumbers = numbers.Where(x => x % 2 == 0); foreach (var number in evenNumbers) { Console.WriteLine(number); // Output: 2, 4, 6 } }

15. Attribute

Metadaten zu Codeelementen hinzufügen:

 [Obsolete("Use the new DoSomethingV2 method instead.")] public void DoSomething() { // Implementation here } public void DoSomethingV2() { // New and improved implementation }

16. Asynchron/Warten

Für nicht blockierende Codeausführung:

 using System.Threading.Tasks; public static async Task DownloadFileAsync(string url, string filePath) { // Simulate downloading data asynchronously await Task.Delay(2000); // Simulate a 2-second download // Write downloaded data to the file File.WriteAllText(filePath, "Downloaded content"); Console.WriteLine($"File downloaded to: {filePath}"); } public static void Main(string[] args) { string url = "https://example.com/data.txt"; string filePath = "downloaded_data.txt"; DownloadFileAsync(url, filePath); // Continue program execution while download happens in the background Console.WriteLine("Downloading file..."); Console.WriteLine("Meanwhile, you can do other things..."); }

17. Verschiedenes

Zusätzliche Sprachfunktionen:

  • Aufzählung, Schnittstelle, Klasse, Datensatz und Struktur


  • dynamisch, is, as, var und nameof

18. String-Manipulation

Leistungsstarke Methoden zur String-Verarbeitung:

 string.Concat(); // Combine strings string.Join(); // Join elements str.Split(); // Split string str.ToUpper(); // Convert to uppercase str.ToLower(); // Convert to lowercase

19. Datei-E/A

Operationen mit Dateien:

 using System.IO; // Required for File I/O File.ReadAllText(path); // Read file content File.WriteAllText(path, content); // Write to file File.Exists(path); // Check file existence

20. Datum und Uhrzeit

Manipulation von Datum und Uhrzeit:

 using System; public static void Main(string[] args) { DateTime startDate = DateTime.Parse("2024-03-10"); DateTime endDate = DateTime.Now; TimeSpan difference = endDate - startDate; Console.WriteLine($"Time difference: {difference.Days} days, {difference.Hours} hours"); }

21. Generika

Typsichere Datenstrukturen:

 public class Stack<T> { private List<T> items = new List<T>(); public void Push(T item) { items.Add(item); } public T Pop() { T item = items[items.Count - 1]; items.RemoveAt(items.Count - 1); return item; } } public static void Main(string[] args) { Stack<string> messages = new Stack<string>(); messages.Push("Hello"); messages.Push("World"); string message = messages.Pop(); Console.WriteLine(message); // Output: World }

22. Nullwerte

Zulassen, dass Werttypen null sind:

 int? nullableInt = null; // Nullable integer

23. Attribute und Reflexion

Metadaten- und Typ-Introspektion:

 public class Person { public string Name { get; set; } public int Age { get; set; } } public static void Main(string[] args) { Type personType = typeof(Person); PropertyInfo[] properties = personType.GetProperties(); foreach (PropertyInfo property in properties) { Console.WriteLine(property.Name); // Output: Name, Age } }

24. Erweiterungsmethoden

Fügen Sie Methoden zu vorhandenen Typen hinzu:

 public static class StringExtensions { public static string ToUppercase(this string str) { return str.ToUpper(); } } public static void Main(string[] args) { string message = "Hello, world!"; string uppercased = message.ToUppercase(); // Using the extension method Console.WriteLine(uppercased); // Output: HELLO, WORLD! }

25. Abhängigkeitsinjektion

Lose gekoppeltes Codedesign:

 public interface ILogger { void LogMessage(string message); } public class MyService { private readonly ILogger _logger; public MyService(ILogger logger) { _logger = logger; } public void DoSomething() { _logger.LogMessage("Doing something..."); } } // Implementing the ILogger interface (example) public class ConsoleLogger : ILogger { public void LogMessage(string message) { Console.WriteLine(message); } } public static void Main(string[] args) { ILogger logger = new ConsoleLogger(); MyService service = new MyService(logger); service.DoSomething(); }

26. Teilklassen

Aufteilen einer einzelnen Klassendefinition:

 public partial class MyClass { /*...*/ } // Partial class definition

27. Interoperabilität

Interop mit anderen Sprachen:

 using System; using System.Runtime.InteropServices; [DllImport("user32.dll")] public static extern int MessageBox(IntPtr hWnd, string lpText, string lpCaption, uint uType); public static void Main(string[] args) { MessageBox(IntPtr.Zero, "Hello from C#!", "Interop Example", 0); }

28. Anonyme Typen

Unbenannte Typen erstellen:csharpCode kopieren

 var person = new { Name = "John", Age = 30 }; Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");

29. Tupel

Datenstrukturen mit einer bestimmten Anzahl von Elementen:

 (string Name, int Age) person = ("Alice", 30); Console.WriteLine($"Name: {person.Name}, Age: {person.Age}"); // Accessing elements using Item1 and Item2

30. Mustervergleich

Vereinfacht bestimmte Programmieraufgaben:

 object obj = new Person { Name = "Bob", Age = 25 }; if (obj is Person { Name: "Bob", Age >= 18 }) { Console.WriteLine("Bob is an adult."); }

31. Lokale Funktionen

Kapseln Sie Logik in Methoden:

 public static int Calculate(int number) { int Factorial(int n) { if (n == 0) return 1; return n * Factorial(n - 1); } return Factorial(number); } public static void Main(string[] args) { int result = Calculate(5); Console.WriteLine($"5! = {result}"); }

32. Aufzeichnungen

Prägnante Syntax für Referenztypen:

 public record Person(string Name, int Age); public static void Main(string[] args) { Person person1 = new Person("Alice", 30); Person person2 = new Person("Alice", 30); // Records provide default equality comparison if (person1 == person2) { Console.WriteLine("People are equal"); } }

33. mit Ausdrücken

Zerstörungsfreie Mutation für Datensätze:

 var john = new Person("John", 30); var jane = john with { Name = "Jane" }; // Non-destructive mutation

34. Indexer und Bereiche

Flexibler Datenzugriff:

 int[] arr = {0, 1, 2, 3, 4, 5}; var subset = arr[1..^1]; // Indexer and range usage

35. using-Deklaration

Entsorgen Sie IDisposable-Objekte:

 using var reader = new StreamReader("file.txt"); // using declaration

36. Nullable Reference Types (NRTs)

Vermeiden Sie Nullreferenzausnahmen:

 public class Person { public string Name { get; set; } public int Age { get; set; } } public static void Main(string[] args) { Person person = new Person() { Age = 30 }; // NRTs require null checks before accessing properties if (person?.Name != null) { Console.WriteLine(person.Name); } else { Console.WriteLine("Name is null"); } }

37. Musterbasierte Verwendung

Weitere Muster in der using-Anweisung:

 public ref struct ResourceWrapper { /*...*/ } // Resource wrapper using var resource = new ResourceWrapper(); // Pattern-based using

38. Eigenschaftsmuster

Dekonstruieren Sie Objekte im Mustervergleich:

 if (obj is Person { Name: "John", Age: var age }) { /*...*/ } // Property pattern matching

39. Standardschnittstellenimplementierungen

Schnittstellen mit Standardmethodenimplementierungen:

 public interface IPerson { /*...*/ } // Interface with default method public class MyClass : IPerson { /*...*/ } // Class implementing interface

40. Dynamische Bindung

Auflösung des Laufzeittyps:

 dynamic d = 5; // Dynamic binding d = "Hello"; // No compile-time type checking

Abschluss

Dieser strukturierte C#-Spickzettel schließt mit fortgeschrittenen Themen und Techniken ab und bietet eine umfassende Referenz für Entwickler, die ihre C#-Programmierkenntnisse verbessern möchten. Ausführliche Beispiele und weitere Erläuterungen finden Sie in den spezifischen Abschnitten in diesem Handbuch. Viel Spaß beim Codieren!

C#-Programmierung🚀

Vielen Dank, dass Sie Teil der C#-Community sind! Bevor Sie gehen:

Wenn Sie es bis hierher geschafft haben, zeigen Sie bitte Ihre Wertschätzung mit einem Klatschen und folgen Sie dem Autor! 👏️️

Folgen Sie uns: X | LinkedIn | Dev.to | Hashnode | Newsletter | Tumblr

Besuchen Sie unsere anderen Plattformen: GitHub | Instagram | Tiktok | Quora | Daily.dev

Inspiriert von: https://zerotomastery.io/cheatsheets/csharp-cheat-sheet/#constants


Auch hier veröffentlicht