So bestehst du das C#-Vorstellungsgespräch: Top-Fragen und Antworten
Ein Vorstellungsgespräch für die Position eines C#/.NET-Entwicklers ist eine Prüfung sowohl der theoretischen Kenntnisse der Plattform als auch der praktischen Programmierfähigkeiten. Arbeitgeber wollen nicht nur eine Person sehen, die Code schreiben kann, sondern einen Ingenieur, der die interne Architektur von .NET, Speicherverwaltung, Asynchronität und die SOLID-Prinzipien versteht.
In diesem Artikel haben wir die Top-10-Fragen zusammengestellt, die in C#-Vorstellungsgesprächen am häufigsten gestellt werden. Du erfährst nicht nur die richtigen Antworten, sondern auch die Stolperfallen, auf die Interviewer achten. Das Material ist sowohl für Junior-Entwickler als auch für Spezialisten auf Middle-Level nützlich.
1. Fragen zu den Grundlagen der OOP in C#
Ohne Verständnis der objektorientierten Programmierung ist ein C#-Vorstellungsgespräch nicht zu bestehen. Interviewer prüfen nicht nur Definitionen, sondern auch die Fähigkeit, die Prinzipien in der Praxis anzuwenden.
Welche OOP-Prinzipien sind in C# implementiert?
C# unterstützt vollständig die vier Säulen der OOP:
- Kapselung — Verbergen der internen Implementierung durch Zugriffsmodifikatoren (
private,protected,internal). - Vererbung — Eine Klasse kann das Verhalten von einer Basisklasse erben (einfache Vererbung).
- Polymorphismus — Die Möglichkeit, mit verschiedenen Typen über eine einheitliche Schnittstelle zu arbeiten (virtuelle Methoden, abstrakte Klassen).
- Abstraktion — Hervorhebung wesentlicher Merkmale eines Objekts und Ignorieren unwesentlicher (Interfaces, abstrakte Klassen).
Beispielfrage: "Was ist der Unterschied zwischen einer abstrakten Klasse und einem Interface?"
Das ist ein Klassiker. Der Hauptunterschied ist, dass ein Interface nur einen Vertrag definiert (Methodensignaturen ohne Implementierung), während eine abstrakte Klasse sowohl Implementierung als auch Zustand (Felder) enthalten kann. In C# ab Version 8.0 können Interfaces eine Standardimplementierung haben, aber das ändert nichts am konzeptionellen Unterschied.
// Abstrakte Klassepublic abstract class Animal{ public string Name { get; set; } public abstract void MakeSound(); // ohne Implementierung public void Sleep() => Console.WriteLine("Zzz..."); // mit Implementierung}
// Interfacepublic interface IMovable{ void Move(); // nur Vertrag}2. Speicherverwaltung und Garbage Collector
Das Verständnis der Funktionsweise des GC ist ein Zeichen für einen erfahrenen Entwickler. Fragen zu diesem Thema dienen oft als Filter zwischen Junior und Middle.
Wie funktioniert der Garbage Collector in .NET?
Der GC arbeitet im managed heap und gibt Speicher von Objekten frei, auf die keine Referenzen mehr zeigen. Er verwendet ein generationsbasiertes Modell (Generation 0, 1, 2):
- Gen 0 — kurzlebige Objekte (wird am häufigsten bereinigt).
- Gen 1 — Puffer zwischen Gen 0 und Gen 2.
- Gen 2 — langlebige Objekte (wird selten bereinigt).
Beispielfrage: "Was sind Finalisierung und IDisposable?"
Der Finalizer (~ClassName()) wird vom GC vor der Speicherfreigabe aufgerufen, aber der Zeitpunkt seines Aufrufs ist nicht deterministisch. Für die deterministische Bereinigung von nicht verwalteten Ressourcen wird das IDisposable-Pattern verwendet:
public class ResourceHolder : IDisposable{ private bool _disposed = false;
public void Dispose() { Dispose(true); GC.SuppressFinalize(this); }
protected virtual void Dispose(bool disposing) { if (_disposed) return; if (disposing) { /* managed Ressourcen freigeben */ } /* unmanaged Ressourcen freigeben */ _disposed = true; }
~ResourceHolder() => Dispose(false);}3. Asynchrone Programmierung: async/await
Ein modernes C#-Vorstellungsgespräch kommt selten ohne Fragen zur Asynchronität aus. Dies ist ein zentrales Thema für