Wie man ein C#-Vorstellungsgespräch besteht: Vollständiger Leitfaden mit Codebeispielen

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

Warum ein C#-Vorstellungsgespräch keine Prüfung, sondern ein Dialog ist

\n\n

Stellen Sie sich vor: Sie sitzen einem Teamleiter oder Senior-Entwickler gegenüber. Er sieht Sie nicht als Feind, sondern als zukünftigen Kollegen. Aber im Kopf ist Nebel, die Hände schwitzen, und bei der Frage nach IDisposable vergessen Sie plötzlich, was das überhaupt ist. Kommt Ihnen bekannt vor?

\n\n

Ein C#-Vorstellungsgespräch ist kein Schultest, bei dem man einfach „den Buchstaben erraten“ muss. Es ist eine Überprüfung Ihres ingenieurtechnischen Denkens, Ihrer Argumentationsfähigkeit und natürlich der Grundkenntnisse der .NET-Plattform. In diesem Artikel analysieren wir die wichtigsten Themen, die in Vorstellungsgesprächen tatsächlich abgefragt werden (Spoiler: 80 % der Fragen wiederholen sich immer wieder).

\n\n

Die Grundlagen, die Sie auswendig kennen müssen

\n\n

Wenn Sie in einer Stunde zum Vorstellungsgespräch fahren und keine Zeit zur Vorbereitung haben, lesen Sie diesen Abschnitt. Das ist das „tägliche Brot“ eines C#-Entwicklers. Ohne dieses Wissen werden Sie nicht einmal als Junior eingestellt.

\n\n

1. Datentypen: Value vs. Reference

\n\n

Dies ist wohl die häufigste Frage. Der Interviewer möchte nicht nur hören „int ist ein Werttyp, class ist ein Referenztyp“. Ihm ist wichtig, ob Sie verstehen, wie das unter der Haube funktioniert.

\n\n
// Beispiel, das oft im Vorstellungsgespräch gegeben wird\nstruct Point {\n    public int X;\n    public int Y;\n}\n\nclass PointClass {\n    public int X;\n    public int Y;\n}\n\nvoid Main() {\n    Point p1 = new Point { X = 10, Y = 20 };\n    Point p2 = p1;\n    p2.X = 999;\n    Console.WriteLine(p1.X); // 10 — Kopie\n\n    PointClass pc1 = new PointClass { X = 10, Y = 20 };\n    PointClass pc2 = pc1;\n    pc2.X = 999;\n    Console.WriteLine(pc1.X); // 999 — Referenz\n}
\n\n

Der entscheidende Punkt: struct wird vollständig kopiert, class wird als Referenz übergeben. Und ja, string ist ein Referenztyp, verhält sich aber aufgrund seiner Unveränderlichkeit wie ein Werttyp. Auch das wird oft gefragt.

\n\n

2. Boxing und Unboxing

\n\n

Ein einfaches Thema, aber es wird gerne gefragt. Stellen Sie sich vor, Sie legen einen Value-Typ (int) in ein object. Dabei findet Boxing statt. Wenn Sie ihn zurückholen, findet Unboxing statt. Das ist leistungstechnisch teuer.

\n\n
int number = 42;\nobject boxed = number; // boxing\nint unboxed = (int)boxed; // unboxing
\n\n

In modernen Projekten ist das selten, aber die Kenntnis des Mechanismus zeigt, dass Sie verstehen, wie .NET den Speicher verwaltet.

\n\n

3. Interfaces und abstrakte Klassen

\n\n

Eine klassische Frage: „Wann verwendet man ein interface und wann eine abstract class?“

\n\n
    \n
  • Interface — ein Vertrag. Wenn Sie verschiedene Klassen haben, die dieselbe Fähigkeit besitzen sollen (z. B. fliegen: Flugzeug, Vogel, Drohne).
  • \n
  • Abstrakte Klasse — eine Basisimplementierung. Wenn Klassen gemeinsame Logik haben (z. B. atmen alle Tiere, aber auf unterschiedliche Weise).
  • \n
\n\n
public interface IFlyable {\n    void Fly();\n}\n\npublic abstract class Animal {\n    public abstract void MakeSound();\n    public void Breathe() => Console.WriteLine("Ein- und ausatmen");\n}
\n\n

In C# 8.0+ haben Interfaces eine Standardimplementierung, aber im Vorstellungsgespräch ist es besser, über den klassischen Ansatz zu sprechen.

\n\n

Fortgeschrittene Fragen: Wo die Fallstricke liegen

\n\n

Wenn die Grundlagen durch sind, beginnt der Interviewer „tiefer zu graben“. Hier sind die Themen, die am häufigsten für Verwirrung sorgen.

\n\n

4. Async/Await und Threads

\n\n

Viele verwechseln Asynchronität und Multithreading. Merken Sie sich: async/await geht um die Freigabe eines Threads, nicht um die Erstellung eines neuen.

\n\n
public async Task<string> GetDataAsync() {\n    using HttpClient client = new HttpClient();\n    // Der Thread wird freigegeben, während wir auf die Antwort warten\n    string result = await client.GetStringAsync("https://example.com");\n    return result;\n}
\n\n

Häufig wird nach ConfigureAwait(false) gefragt. Die Antwort: Es wird benötigt, um nicht in den ursprünglichen Synchronisationskontext zurückzukehren (z. B. im UI-Thread von WPF). In Bibliotheken immer verwenden, in Anwendungen mit Vorsicht.

\n\n

5. LINQ: Vom Einfachen

Blogs

Buchempfehlungen