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.
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.
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.
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
public void ConfigureServices(IServiceCollection services) { // Register a transient service services.AddTransient<IMyService, MyService>(); }
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.
In C# werden ref und out verwendet, um Parameter per Referenz zu übergeben, sie haben jedoch unterschiedliche Merkmale.
public void UpdateValue(ref int number) { number += 10; } int myNumber = 5; UpdateValue(ref myNumber); Console.WriteLine(myNumber); // Outputs: 15
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.
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.
public async Task<string> FetchDataAsync() { await Task.Delay(1000); // Simulates an asynchronous operation return "Data fetched"; }
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.
Die ordnungsgemäße Ausnahmebehandlung ist für die Aufrechterhaltung robuster und benutzerfreundlicher Anwendungen von entscheidender Bedeutung. .NET Core bietet verschiedene Mechanismen zur Ausnahmebehandlung.
try { int result = 10 / 0; // This will throw a DivideByZeroException } catch (DivideByZeroException ex) { Console.WriteLine("An error occurred: " + ex.Message); }
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.
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.
{ "ConnectionStrings": { "DefaultConnection": "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;" }, "Logging": { "LogLevel": { "Default": "Warning" } } }
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.
Sowohl Task als auch Thread werden für die gleichzeitige Programmierung in C# verwendet, sie dienen jedoch unterschiedlichen Zwecken.
Thread thread = new Thread(() => { Console.WriteLine("Running on a new thread"); }); thread.Start();
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
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!