Neu in .NET 7 [9]: Überladen von Operatoren in Schnittstellen ab C# 11.0
Die jüngste C#-Version ermöglicht das Überladen von Operatoren nicht nur in Klassen, sondern auch in Interfaces.
(Bild: Piyawat Nandeenopparit/Shutterstock.com)
- Dr. Holger Schwichtenberg
Seit der ersten Version von C# ermöglicht die Programmiersprache das Überladen von Operatoren. C# 11.0 führt die Möglichkeit ein, eine Operatorüberladung in einem Interface zu definieren, um eine Vorgabe beziehungsweise Gemeinsamkeit für alle Implementierungen zu schaffen. Erst seit C# 11.0 ist static abstract
in Schnittstellen erlaubt.
Ein Interface mit einem überladenen Operator könnte folgendermaßen aussehen:
namespace de.WWWings;
public interface IFlug<TSelf>
where TSelf : IFlug<TSelf>
{
string AbflugOrt { get; set; }
double Auslastung { get; }
DateTime Datum { get; set; }
long FlugNr { get; set; }
short FreiePlaetze { get; set; }
bool Nichtraucherflug { get; set; }
short Plaetze { get; set; }
string Route { get; }
string ZielOrt { get; set; }
public static abstract Flug operator
+(TSelf flug, de.WWWings.PassagierSystem.Passagier pass);
}
Der eine oder die andere wird sich fragen, warum die Schnittstelle generisch sein muss. Der Grund dafür ist einfach: Man will am Ende ein Flug
-Objekt einfach mit +
zu einem Passagier addieren können. Ohne die generische Implementierung könnte man nur eine Variable vom Typ IFlug
zum Passagier addieren.
Schließlich benötigt die Implementierung der Klasse noch die Schnittstellenimplementierung : IFlug<Flug>
:
namespace de.WWWings
{
public partial class Flug : IFlug<Flug>
{
…
/// <summary>
/// Operatorüberladung fuer die Buchung eines Flugs
/// durch Addition eines Flug- und eines Passagier-Objekts.
/// </summary>
/// <param name="flug">Flugobjekt</param>
/// <param name="pass">Passagierobjekt</param>
/// <returns>Flugobjekt mit hinzugefügten Passagier</returns>
public static Flug operator +(Flug flug,
PassagierSystem.Passagier pass)
{
pass.Buchen(flug);
return flug;
}
}
}
(rme)