Neu in .NET 7 [8]: Statische abstrakte Properties & Methoden in Interfaces in C#
In der neuen Version von Microsofts Programmiersprache C# dĂĽrfen Schnittstellendeklarationen von Properties und Methoden als static abstract deklariert sein.
- Dr. Holger Schwichtenberg
C# 11.0 erlaubt Schnittstellendeklarationen von Properties und Methoden mit static abstract und static virtual. In C# 10.0 war das schon experimentell möglich.
Beispiel: Es gibt zwei Schnittstellen. IObjectWithID gibt eine statische Property vom Typ Integer mit Namen ID vor. Die darauf aufbauende Schnittstelle IAbc gibt drei weitere Mitglieder vor:
Videos by heise
- Eine formale abstrakte Instanzmethode
GetA(), - eine statische Methode
GetB()mit Implementierung und - eine statische abstrakte Methode
GetC():
interface IObjectWithID
{
static abstract int ID { get; set; } // NEU
}
interface IAbc : IObjectWithID
{
string GetA();
static string GetB() => "B";
static abstract string GetC(); // NEU
}
Dazu zeigt folgende Implementierung der Klasse Abc auf Basis von Schnittstelle IAbc, dass man die als static abstract deklarierten Mitglieder nun als statische Mitglieder implementieren muss:
class Abc : IAbc
{
public string GetA() => "A";
// muss nicht-statische Implementierung fĂĽr GetA() liefern
public static string GetC() => "C";
// muss statische Implementierung fĂĽr GetC() liefern
public static int ID { get; set; } = 1;
// muss statische Implementierung fĂĽr ID liefern
}
Dann sind folgende Verwendungen möglich:
var obj = new Abc();
// Instanzmitglied:
Console.WriteLine(obj.GetA());
// statisches Mitglied direkt im Interface:
Console.WriteLine(IAbc.GetB());
// statisches Mitglied - Nutzung via Klassenname:
Console.WriteLine(Abc.ID);
// statisches Mitglied - Nutzung via Klassenname:
Console.WriteLine(Abc.GetC());
An diesem Sprachfeature hat Microsoft laut Aussage von Program Manager Mads Torgersen mehr als zehn Jahre gearbeitet. Erst die Möglichkeit, die Runtime von .NET zu verändern, hat die Umsetzung zur Produktreife gebracht (Quelle: .NET Conf 2022, 9.11.2022). Veränderungen der Runtime wurden im klassischen .NET Framework wegen möglicher Breaking Changes nicht oder nur in kleinen Dosen umgesetzt.
(rme)