Wissen von A bis Z

Interfaces

Ein Interface ist wie ein Führerschein: Es ist egal, welches Auto du fährst, solange du weißt, wie man lenkt und bremst, kannst du jedes Modell bedienen.

Interfaces sind in C# Verträge, die eine Menge von Mitgliedern (Methoden, Properties, Events, Indexer) definieren, ohne deren Implementierung festzulegen. Klassen und Strukturen können beliebig viele Interfaces implementieren und dadurch Polymorphismus jenseits klassischer Vererbung ermöglichen — ein zentrales Mittel für lose Kopplung, austauschbare Implementierungen und testbare Architekturen.

Eingesetzt werden Interfaces überall im modernen .NET: in der Dependency Injection von ASP.NET Core (registriert als IService, aufgelöst zur konkreten Implementierung), in der Standardbibliothek (IEnumerable, IDisposable, IComparable, IEquatable), in den meisten Frameworks (ILogger, IConfiguration, IOptions, IHostedService), in eigenen Domänenarchitekturen (IRepository, IUnitOfWork, ICommandHandler) und in Plugin-Modellen, in denen externer Code gegen Interfaces programmiert.

Der Einsatzzweck und das gelöste Problem ergeben sich aus dem Interface Segregation Principle und dem Dependency Inversion Principle der SOLID-Familie: Module sollen nicht von konkreten Implementierungen abhängen, sondern von Abstraktionen. Interfaces sind in C# das natürliche Mittel dafür. Sie erlauben es zudem, mehrere Aspekte einer Klasse unabhängig voneinander zu beschreiben — eine Klasse kann gleichzeitig IEnumerable, IDisposable und IFormattable sein, was mit Einfachvererbung allein unmöglich wäre.

Historisch sind Interfaces seit C# 1.0 (2002) in der Sprache enthalten und konzeptionell von Java und COM beeinflusst. Bemerkenswerte Erweiterungen kamen mit C# 8 (2019): Default Interface Methods erlauben es, Methoden im Interface eine Standardimplementierung zu geben, was Versionsmigrationen großer Bibliotheken erleichtert; mit C# 11 wurden Static Abstract Members in Interfaces eingeführt, die unter anderem die ‚Generic Math'-APIs der Standardbibliothek (INumber, IAdditionOperators) ermöglichen.

Eingeführt wurden Interfaces in C# durch das Sprachteam um Anders Hejlsberg, mit Anleihen aus seinem früheren Werk an Object Pascal/Delphi und an COM. Die Entscheidung, Default Interface Methods erst nach 17 Jahren einzuführen, war intern stark umstritten — Kritiker warnten vor einem ‚Java-ähnlichen' Aufweichen des Interface-Konzepts, Befürworter verwiesen auf die Notwendigkeit, große Bibliotheken evolutionsfähig zu halten. Die letztliche Implementierung mit eingeschränkter Vererbung und expliziten Aufrufregeln gilt heute als pragmatischer Kompromiss, der die Vorteile nutzbar macht, ohne das ursprüngliche Vertragsmodell vollständig zu verwässern.

Zurück