Wie man ein C#-Vorstellungsgespräch besteht: Top-Fragen und Antworten

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

So bestehst du das C#-Vorstellungsgespräch: Top-Fragen und Antworten



Ein Vorstellungsgespräch für eine Position als C# / .NET-Entwickler testet nicht nur technisches Wissen, sondern auch die Fähigkeit zu denken und komplexe Konzepte einfach zu erklären. In diesem Artikel haben wir die häufigsten Fragen aus Interviews mit Codebeispielen und Erklärungen zusammengestellt. Das Material ist sowohl für Junior- als auch für Middle-Entwickler nützlich.



1. Was ist der Unterschied zwischen Value Types und Reference Types?



Dies ist eine grundlegende, aber wichtige Frage. In C# werden alle Typen in zwei Kategorien eingeteilt:



  • Value Types (Wertetypen) — werden auf dem Stack gespeichert, bei Zuweisung kopiert. Beispiele: int, double, struct, enum.
  • Reference Types (Referenztypen) — werden auf dem Heap gespeichert, die Variable speichert einen Verweis auf das Objekt. Beispiele: class, string, array, delegate.


Beispiel für das Vorstellungsgespräch:



int a = 10;int b = a;b = 20;Console.WriteLine(a); // 10 — Wert hat sich nicht geändert

var obj1 = new MyClass { Value = 10 };var obj2 = obj1;obj2.Value = 20;Console.WriteLine(obj1.Value); // 20 — gleiche Referenz


Im Vorstellungsgespräch wird auch oft nach Boxing/Unboxing gefragt — der Umwandlung eines Value Type in object und zurück. Versuche dies im Code zu vermeiden, da es die Leistung beeinträchtigt.



2. Was sind Delegaten, Ereignisse und Lambda-Ausdrücke?



Delegaten sind Typen, die Verweise auf Methoden speichern. Ereignisse sind ein Wrapper um Delegaten, der zur Implementierung des "Publisher-Subscriber"-Musters verwendet wird.



Beispiel für einen Delegaten:



public delegate void MyDelegate(string message);

public static void ShowMessage(string msg) => Console.WriteLine(msg);

MyDelegate del = ShowMessage;del("Hello from delegate");


Beispiel für ein Ereignis:



public class Button{    public event EventHandler Click;    public void Press() => Click?.Invoke(this, EventArgs.Empty);}


Lambda-Ausdrücke sind eine Kurzschreibweise für anonyme Methoden. Sie werden häufig in LINQ verwendet:



var numbers = new List<int> { 1, 2, 3, 4, 5 };var even = numbers.Where(x => x % 2 == 0).ToList();


Im Vorstellungsgespräch könnte gefragt werden: "Warum ist es besser, Ereignisse anstelle von Delegaten zu verwenden?" — Antwort: Ereignisse schützen die Abonnentenliste vor externen Änderungen (Invoke kann nicht von außen aufgerufen werden).



3. Wie funktioniert async/await und was ist der Unterschied zur Multithreading?



Dies ist eine der häufigsten Fragen. async/await ist syntaktischer Zucker für die Arbeit mit asynchronen Operationen. Es erzeugt keinen neuen Thread, sondern nutzt den vorhandenen effizient (UI-Thread oder Thread aus dem Pool).



Wichtige Punkte:

  • async — Methodenmodifikator, der die Verwendung von await erlaubt.
  • await — unterbricht die Ausführung der Methode, bis die Aufgabe abgeschlossen ist, ohne den Thread zu blockieren.
  • Rückgabetyp — normalerweise Task oder Task<T>.


Beispiel:



public async Task<string> GetDataAsync(){    using var client = new HttpClient();    string result = await client.GetStringAsync("https://api.example.com");    return result;}


Unterschied zur Multithreading: Multithreading (Thread, Task.Run) ist die parallele Ausführung von Code auf mehreren CPU-Kernen. Async/await ist Asynchronität, die den Thread für andere Aufgaben freigibt, während auf etwas gewartet wird (z. B. auf eine Antwort vom Server).



Tipp: Nenne im Vorstellungsgespräch ein reales Beispiel — das Laden von Daten aus dem Netzwerk oder einer Datei. Vermeide async void (außer bei Ereignisbehandlern) — dies kann zu unbehandelten Ausnahmen führen.

Blogs

Buchempfehlungen