paint-brush
7 Schlüsselkonzepte zum Testen Ihrer .NET-Kenntnissevon@ssukhpinder
126 Lesungen

7 Schlüsselkonzepte zum Testen Ihrer .NET-Kenntnisse

von Sukhpinder Singh7m2024/09/30
Read on Terminal Reader

Zu lang; Lesen

Dieser Artikel behandelt wichtige C#-Konzepte für .NET-Entwickler, darunter IEnumerable vs. ICollection, Dependency Injection, async/await, ref- vs. out-Parameter, Ausnahmebehandlung und die Unterschiede zwischen Task und Thread bei paralleler Programmierung. Er enthält praktische Codebeispiele, um Ihr Verständnis zu testen und zu vertiefen.
featured image - 7 Schlüsselkonzepte zum Testen Ihrer .NET-Kenntnisse
Sukhpinder Singh HackerNoon profile picture
0-item
1-item
2-item
3-item

Dieser Artikel ist perfekt für alle, die ihre .NET-Expertise unter Beweis stellen möchten!


Hallo .NET-Entwickler,


In diesem Artikel werde ich verschiedene C#-Konzepte untersuchen, die jeder Entwickler kennen muss. Es ist immer eine gute Idee, sein Wissen zu testen, und ich habe in diesem Artikel einige Beispiele mit Erklärungen und Codebeispielen zusammengestellt.


Wenn Sie die Codebeispiele kennen und verstehen, kommen Sie mit .NET wahrscheinlich recht gut zurecht.

1. Unterschied zwischen IEnumerable<T> und ICollection<T>

Beim Schreiben von Logik in C# stoßen Entwickler häufig auf IEnumerable<T> und ICollection<T>. Sie sehen zwar recht ähnlich aus, dienen jedoch bei der Softwareentwicklung unterschiedlichen Zwecken.


  • IEnumerable<T> fungiert als Basisschnittstelle für nicht generische Sammlungen. Es hilft, über eine Sammlung eines definierten Typs zu iterieren.


Gut, eine leichte Sammlung zu haben, die sicherer ist, da Datenmanipulation nicht erlaubt ist. Wenn Sie Datenmanipulation bei jeder Sammlung verhindern möchten, wird empfohlen, IEnumerable<T> zu verwenden.

 IEnumerable<int> numbers = new List<int> { 1, 2, 3 }; foreach (var number in numbers) { Console.WriteLine(number); // Outputs: 1 2 3 }
  • ICollection<T> erweitert IEnumerable<T> und ermöglicht Änderungen mithilfe von Änderungsmethoden. Diese Schnittstelle besteht aus Methoden zum Hinzufügen, Entfernen und Überprüfen von Zählungen in der Sammlung.


 ICollection<int> data = new List<int> { 12,43,556}; numbers.Add(4); Console.WriteLine(data.Count); // Outputs: 4

Es wird empfohlen, ICollection<T> zu verwenden, wenn Änderungsmethoden für die Sammlung erforderlich sind, und IEnumerable<T> für einfache Leseaktionen.

2. Die Rolle der Abhängigkeitsinjektion in .NET Core

Es wird empfohlen, ein DI-Entwurfsmuster zu verwenden, wenn Sie lose gekoppelten und testbaren Code schreiben möchten. Mit DI können Entwickler Abhängigkeiten zwischen Klassen einfach verwalten.


.NET Core verfügt über integrierte Unterstützung für DI, was die Implementierung vereinfacht.


Wie ein Entwickler DI in C# implementieren kann

  • Registrieren Sie Dienste in der Methode ConfigureServices Ihrer Datei Startup.cs. Hier definieren Sie, welche Dienste für die Injektion verfügbar sein sollen.
 public void ConfigureServices(IServiceCollection services) { // Register a transient service services.AddTransient<IMyService, MyService>(); }


  • Fügen Sie Ihren Klassen Dienste durch Konstruktor-Injektion hinzu. Dadurch wird sichergestellt, dass Ihre Klassen ihre Abhängigkeiten erhalten, ohne dass sie diese direkt erstellen müssen.
 public class MyController : Controller { private readonly IMyService _myService; public MyController(IMyService myService) { _myService = myService; } public IActionResult Index() { var data = _myService.GetData(); return View(data); } }

Ein Code ist besser wartbar und testbar, wenn ein Entwickler die Erstellung von Diensten entkoppelt.

3. Der Unterschied zwischen ref- und out-Parametern

In C# werden ref und out verwendet, um Parameter per Referenz zu übergeben, sie haben jedoch unterschiedliche Merkmale.

  • Ref -Parameter erfordern, dass die Variable initialisiert wird, bevor sie an eine Methode übergeben wird. Die Methode kann dann den Wert der Variablen ändern.
 public void UpdateValue(ref int number) { number += 10; } int myNumber = 5; UpdateValue(ref myNumber); Console.WriteLine(myNumber); // Outputs: 15


  • Out -Parameter müssen vor der Übergabe nicht initialisiert werden. Die Methode muss dem Out-Parameter einen Wert zuweisen, bevor sie zurückkehrt.
 public void GetValues(out int value1, out int value2) { value1 = 10; value2 = 20; } GetValues(out int a, out int b); Console.WriteLine(a); // Outputs: 10 Console.WriteLine(b); // Outputs: 20

„ref“ wird normalerweise verwendet, wenn eine Methode eine vorhandene Variable ändern muss, während „out“ verwendet wird, wenn eine Methode mehrere Werte zurückgeben oder Werte initialisieren muss, die nicht vom Anrufer bereitgestellt wurden.

4. Async und Await: Verbesserung der Anwendungsleistung

In .NET ist die asynchrone Programmierung für das Schreiben effizienter Anwendungen, die unter Last gut funktionieren, unerlässlich. Die Schlüsselwörter async und await vereinfachen das Arbeiten mit asynchronen Vorgängen.

  • Mit asynchronen Methoden können Sie Aufgaben asynchron ausführen. Markieren Sie eine Methode mit dem Schlüsselwort async, um die Verwendung von await darin zu ermöglichen.
 public async Task<string> FetchDataAsync() { await Task.Delay(1000); // Simulates an asynchronous operation return "Data fetched"; }


  • await unterstützt die Anwendungs-Benutzeroberfläche, indem es den Hauptthread nicht blockiert.
 public async Task ShowDataAsync() { string data = await FetchDataAsync(); Console.WriteLine(data); }

Wenn Sie die Leistung Ihrer Anwendung verbessern möchten, verwenden Sie „async“ und „await“ effektiv und sorgen Sie gleichzeitig dafür, dass die Benutzeroberfläche der Anwendung reaktionsfähig bleibt.

5. Ausnahmebehandlung in .NET Core-Anwendungen

Die ordnungsgemäße Ausnahmebehandlung ist für die Aufrechterhaltung robuster und benutzerfreundlicher Anwendungen von entscheidender Bedeutung. .NET Core bietet verschiedene Mechanismen zur Ausnahmebehandlung.

  • Lokale Ausnahmebehandlung: Verwenden Sie Try-Catch-Blöcke, um Ausnahmen abzufangen und zu behandeln.
 try { int result = 10 / 0; // This will throw a DivideByZeroException } catch (DivideByZeroException ex) { Console.WriteLine("An error occurred: " + ex.Message); }


  • Die globale Ausnahmebehandlung in ASP.NET Core kann mithilfe von Middleware verwaltet werden. Fangen Sie alle Arten von Ausnahmen an einem gemeinsamen Ort ab, was Entwicklern hilft, benutzerfreundliche/allgemeine Fehlermeldungen für Benutzer zu verwalten.
 public void Configure(IApplicationBuilder app) { app.UseExceptionHandler("/Home/Error"); }

Die globale Middleware zur Ausnahmebehandlung bietet einen gemeinsamen Ort zur Behandlung aller Anwendungsfehler und Ausnahmen. Sie stellt sicher, dass die Anwendung Antworten konsistent verarbeitet.

6. Die Rolle von appsettings.json ASP.NET Core

Die Datei appsettings.json wird zum Verwalten von Anwendungsanmeldeinformationen wie Konfigurationszeichenfolgen und anderen anwendungsspezifischen Schlüsseln verwendet. Die Konfigurationseinstellungen können auch nach Umgebungen aufgeteilt werden.

  • Beispieldatei appsettings.json:
 { "ConnectionStrings": { "DefaultConnection": "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;" }, "Logging": { "LogLevel": { "Default": "Warning" } } }


  • Der Zugriff auf Konfigurationswerten in Ihrer Anwendung ist mithilfe des integrierten Konfigurationssystems ganz einfach.
 public class MyService { private readonly string _connectionString; public MyService(IConfiguration configuration) { _connectionString = configuration.GetConnectionString("DefaultConnection"); } }

Die Datei appsettings.json ermöglicht das einfache Abrufen von Konfigurationseinstellungen und muss effizient gehandhabt werden.

7. Task vs. Thread in C# verstehen

Sowohl Task als auch Thread werden für die gleichzeitige Programmierung in C# verwendet, sie dienen jedoch unterschiedlichen Zwecken.

  • Thread stellt einen einzelnen Ausführungspfad dar und ist ein Konstrukt auf niedrigerer Ebene. Es bietet mehr Kontrolle über die Ausführung, erfordert jedoch manuelle Verwaltung.
 Thread thread = new Thread(() => { Console.WriteLine("Running on a new thread"); }); thread.Start();


  • Task bietet eine abstrakte Funktionalität zum Implementieren asynchroner Vorgänge und wird zusammen mit async/await verwendet.
 Task.Run(() => { Console.WriteLine("Running asynchronously"); });

Aufgaben vereinfachen die Verwaltung asynchroner Vorgänge und sind häufig die bevorzugte Wahl für die moderne C#-Entwicklung.


Greifen Sie auf die komplette C# .Net-Interviewreihe zu

Und, wie ist es Ihnen ergangen?

Wenn Sie das Konzept sicher beherrschen und die Codebeispiele verstehen, sind Sie wahrscheinlich mit .NET gut vertraut.

Lassen Sie uns das Gespräch fortsetzen und uns gegenseitig dabei helfen, als .NET-Experten zu wachsen.


Viel Spaß beim Programmieren!