Neuerungen in .NET 6
Mit .NET 6 wird der Vereinheitlichungsplan vollständig umgesetzt, der mit .NET 5 begonnen wurde. In .NET 6 werden das SDK, die Basisbibliotheken und die Runtime für mobile Apps, Desktop-, IoT- und Cloud-Apps vereinheitlicht. Zusätzlich zu dieser Vereinheitlichung bietet das .NET 6-Ökosystem Folgendes:
Vereinfachte Entwicklung: Der Einstieg ist einfach. Neue Sprachfeatures in C# 10 reduzieren die Codemenge, die Sie schreiben müssen. Die Investitionen in den Webstapel und die minimalistischen APIs erleichtern darüber hinaus das Programmieren kleinerer und schnellerer Microservices.
Bessere Leistung: .NET 6 ist das schnellste Full-Stack-Webframework, das bei Ausführungen in der Cloud sogar die Computekosten senkt.
Höchste Produktivität: In .NET 6 und Visual Studio 2022 sind Hot Reload, neue Git-Tools, intelligente Codebearbeitung, stabile Diagnose- und Testtools und Features für eine bessere Zusammenarbeit verfügbar.
.NET 6 wird drei Jahre lang als LTS-Release (Long-Term Support) unterstützt.
Vorschaufeatures sind standardmäßig deaktiviert. Sie werden auch nicht für die Verwendung in der Produktion unterstützt und werden in einer zukünftigen Version ggf. entfernt. Die neue Klasse RequiresPreviewFeaturesAttribute wird verwendet, um Vorschau-APIs zu kommentieren, und ein entsprechendes Analyseprogramm warnt Sie, wenn Sie diese Vorschau-APIs verwenden.
.NET 6 wird von Visual Studio 2022 und Visual Studio 2022 für Mac (und höher) unterstützt.
In diesem Artikel werden nicht alle neuen Features von .NET 6 behandelt. Alle neuen Features und weitere Informationen zu den in diesem Artikel aufgeführten Features finden Sie im Blogbeitrag Ankündigung von .NET 6.
Leistung
In .NET 6 wurden zahlreiche Leistungsverbesserungen vorgenommen. In diesem Abschnitt werden einige der Verbesserungen in FileStream, der profilgesteuerten Optimierung und der AOT-Kompilierung aufgeführt. Ausführliche Informationen finden Sie im Blogbeitrag Leistungsverbesserungen in .NET 6.
FileStream
Der Typ System.IO.FileStream wurde für .NET 6 umgeschrieben, um die Leistung und Zuverlässigkeit unter Windows zu verbessern. Jetzt wird die Klasse FileStream nie blockiert, wenn Sie für asynchrone E/A-Vorgänge unter Windows erstellt wird. Weitere Informationen finden Sie im Blogbeitrag Verbesserungen an Datei-E/A in .NET 6.
Profilgesteuerte Optimierung
Bei der profilgesteuerten Optimierung (PGO) generiert der JIT-Compiler optimierten Code für die am häufigsten verwendeten Typen und Codepfade. Mit .NET 6 wird die dynamische PGO eingeführt. Die dynamische PGO ist eng mit der mehrstufigen Kompilierung verzahnt, um den Code auf Grundlage der zusätzlichen Instrumentierung in Ebene 0 zu weiter zu optimieren. Die dynamische PGO ist standardmäßig deaktiviert, aber Sie können sie mit der UmgebungsvariablenDOTNET_TieredPGO
aktivieren. Weitere Informationen finden Sie unter Verbesserungen der JIT-Leistung.
Crossgen2
In .NET 6 wird Crossgen2 eingeführt, der Nachfolger des eingestellten Crossgen-Tools. Crossgen und Crossgen2 sind Tools, die eine AOT-Kompilierung (Ahead-of-Time) ermöglichen, um die Startzeit einer App zu verbessern. Crossgen2 ist nicht in C++, sondern in C# geschrieben und kann Analysen und Optimierungen durchführen, die in der vorherigen Version nicht möglich waren. Weitere Informationen finden Sie in diesem Interview zu Crossgen2.
ARM64-Unterstützung
Das .NET 6-Release unterstützt die Betriebssysteme macOS ARM64 (oder Apple Silicon) und Windows ARM64 sowohl für die native ARM64-Ausführung als auch für die x64-Emulation. Darüber hinaus werden die .NET-Installationsprogramme für x64 und ARM64 jetzt parallel installiert. Weitere Informationen finden Sie unter .NET-Unterstützung für macOS 11 und Windows 11 für ARM64 und x64.
Erneut laden im laufenden Betrieb
Hot Reload ist ein Feature, mit dem Sie den Quellcode Ihrer App bearbeiten und die Änderungen sofort auf Ihre ausgeführte App anwenden können. Der Zweck des Features besteht darin, Ihre Produktivität zu steigern, da App-Neustarts nach Bearbeitungen vermieden werden. Hot Reload ist in Visual Studio 2022 und dem Befehlszeilentool dotnet watch
verfügbar. Hot Reload ist mit den meisten .NET-Apps und mit C#-, Visual Basic- und C++-Quellcode kompatibel. Weitere Informationen finden Sie im Blogbeitrag zu Hot Reload.
.NET MAUI
.NET Multi-Platform App UI (.NET MAUI) befindet sich derzeit noch in der Vorschauphase. Ein Release Candidate wird im ersten Quartal 2022 und eine allgemein verfügbare Version im zweiten Quartal 2022 veröffentlicht. Mit .NET MAUI können Sie native Client-Apps für Desktop- und mobile Betriebssysteme mit einer einzigen Codebasis entwickeln. Weitere Informationen finden Sie im Blogbeitrag Update zu .NET Multi-Platform App UI.
C# 10 und Vorlagen
In C# 10 wurden Innovationen wie global using
-Anweisungen, dateibezogene Namespacedeklarationen und Datensatzstrukturen eingeführt. Weitere Informationen finden Sie unter Neuerungen in C# 10.
Auch die .NET SDK-Projektvorlagen für C# wurden modernisiert, sodass diese nun einige der neuen Sprachfeatures verwenden können:
async Main
-Methode- Top-Level-Anweisungen
- Zieltypisierte neue Ausdrücke
- Implizite
global using
-Anweisungen - Dateibereichsnamespaces
- Nullwerte zulassende Verweistypen
Da diese neuen Sprachfeatures zu den Projektvorlagen hinzugefügt wurden, sind sie bei neuem Code bereits aktiviert. Auf bestehenden Code werden sie jedoch nicht angewendet, wenn Sie ein Upgrade auf .NET 6 durchführen. Weitere Informationen zu diesen Vorlagenänderungen finden Sie im Blogbeitrag .NET SDK: Modernisierte C#-Projektvorlagen.
F# und Visual Basic
In F# 6 wurden einige Verbesserungen an F# und F# Interactive vorgenommen. Weitere Informationen finden Sie unter Neuerungen in F# 6.
Für Visual Basic wurden Verbesserungen in Visual Studio und beim Windows Forms-Projektstart vorgenommen.
SDK-Workloads
Um das .NET SDK kleiner zu halten, wurden einige Komponenten in neuen, optionalen SDK-Workloads untergebracht. Zu diesen Komponenten gehören .NET MAUI und Blazor WebAssembly AOT. Wenn Sie Visual Studio verwenden, werden alle benötigten SDK-Workloads automatisch installiert. Wenn Sie die .NET-CLIverwenden, können Sie Workloads mit den neuen dotnet workload
-Befehlen verwalten:
Befehl | BESCHREIBUNG |
---|---|
dotnet workload search | Sucht nach verfügbaren Workloads |
dotnet workload install | Installiert eine angegebene Workload |
dotnet workload uninstall | Entfernt eine angegebene Workload |
dotnet workload update | Aktualisiert installierte Workloads |
dotnet workload repair | Installiert alle installierten Workloads neu, um eine fehlerhafte Installation zu reparieren |
dotnet workload list | Listet installierte Workloads auf |
Weitere Informationen finden Sie unter Optionale SDK-Workloads.
System.Text.Json-APIs
An System.Text.Json wurden in .NET 6 viele Verbesserungen vorgenommen, sodass es sich jetzt um eine branchentaugliche Serialisierungslösung handelt.
Quell-Generator
In .NET 6 wurde ein neuer Quell-Generator für System.Text.Json hinzugefügt. Die Quellgenerierung verwendet JsonSerializer und kann auf verschiedene Weise konfiguriert werden. Sie kann die Leistung verbessern, die Arbeitsspeicherauslastung reduzieren und das Kürzen von Assemblys vereinfachen. Weitere Informationen finden Sie unter Tipps zur Auswahl zwischen der Reflexion und der Quellgenerierung in System.Text.Json und Verwenden der Quellgenerierung in System.Text.Json.
Beschreibbares DOM
Ein neues, beschreibbares Dokumentobjektmodell (DOM) wurde hinzugefügt, das das vorhandene schreibgeschützte DOM ergänzt. Die neue API stellt eine schlanke Serialisierungsalternative für Fälle dar, in denen die Verwendung von Plain Old CLR Object-Typen (POCO) nicht möglich ist. Außerdem können Sie effizient zu einem Unterabschnitt einer großen JSON-Struktur navigieren und ein Array lesen oder ein POCO aus diesem Unterabschnitt deserialisieren. Die folgenden neuen Typen wurden hinzugefügt, um das beschreibbare DOM zu unterstützen:
Weitere Informationen finden Sie unter JSON-Optionen für DOMs.
IAsyncEnumerable-Serialisierung
System.Text.Json unterstützt jetzt die Serialisierung und Deserialisierung mit IAsyncEnumerable<T>-Instanzen. Asynchrone Serialisierungsmethoden enumerieren alle IAsyncEnumerable<T>-Instanzen in einem Objektgraphen und serialisieren sie dann als JSON-Arrays. Für die Deserialisierung wurde die neue Methode JsonSerializer.DeserializeAsyncEnumerable<TValue>(Stream, JsonSerializerOptions, CancellationToken) hinzugefügt. Weitere Informationen finden Sie unter IAsyncEnumerable-Serialisierung.
Weitere neue APIs
Neue Serialisierungsschnittstellen für Validierungs- und Standardwerte:
Weitere Informationen finden Sie unter Rückrufe.
Neues Attribut für die Sortierung von Eigenschaften:
-
Weitere Informationen finden Sie unter Konfigurieren der Reihenfolge serialisierter Eigenschaften.
Neue Methode zum Schreiben von unformatiertem JSON-Code:
-
Weitere Informationen finden Sie unter Schreiben von unformatiertem JSON-Code.
Synchrone Serialisierung und Deserialisierung in einen Stream:
- JsonSerializer.Deserialize(Stream, Type, JsonSerializerOptions)
- JsonSerializer.Deserialize(Stream, Type, JsonSerializerContext)
- JsonSerializer.Deserialize<TValue>(Stream, JsonSerializerOptions)
- JsonSerializer.Deserialize<TValue>(Stream, JsonTypeInfo<TValue>)
- JsonSerializer.Serialize(Stream, Object, Type, JsonSerializerOptions)
- JsonSerializer.Serialize(Stream, Object, Type, JsonSerializerContext)
- JsonSerializer.Serialize<TValue>(Stream, TValue, JsonSerializerOptions)
- JsonSerializer.Serialize<TValue>(Stream, TValue, JsonTypeInfo<TValue>)
Neue Option zum Ignorieren eines Objekts, wenn während der Serialisierung ein Zirkelbezug erkannt wird:
-
Weitere Informationen finden Sie unter Ignorieren von Zirkelbezügen.
Weitere Informationen zum Serialisieren und Deserialisieren mit System.Text.Json
finden Sie unter JSON-Serialisierung und -Deserialisierung in .NET.
HTTP/3
.NET 6 unterstützt die Vorschauversion von HTTP/3, eine neue Version von HTTP. HTTP/3 löst einige vorhandene Funktions- und Leistungsprobleme, indem ein neues zugrunde liegendes Verbindungsprotokolls namens QUIC eingeführt wird. QUIC stellt Verbindungen schneller ein, und Verbindungen sind unabhängig von der IP-Adresse, sodass mobile Clients zwischen WLAN und Mobilfunknetzwerken roamen können. Weitere Informationen finden Sie unter Verwenden von HTTP/3 mit HttpClient.
ASP.NET Core
In ASP.NET Core wurden Verbesserungen an den minimalistischen APIs, der AOT-Kompilierung (Ahead-of-Time) für Blazor WebAssembly-Apps und Single-Page-Apps vorgenommen. Darüber hinaus können Blazor-Komponenten jetzt aus JavaScript gerendert und in vorhandene JavaScript-basierte Apps integriert werden. Weitere Informationen finden Sie unter Neues bei ASP.NET Core 6.
OpenTelemetry
.NET 6 bietet eine verbesserte Unterstützung für OpenTelemetry. Dabei handelt es sich um eine Sammlung von Tools, APIs und SDKs, mit denen Sie die Leistung und das Verhalten Ihrer Software analysieren können. APIs im Namespace System.Diagnostics.Metrics implementieren die OpenTelemetry Metrics-API-Spezifikation. Beispielsweise gibt es vier Instrumentklassen für unterschiedliche Metrikszenarios. Die Instrumentklassen sind:
Sicherheit
.NET 6 unterstützt zwei neue Ansätze zur Entschärfung von Sicherheitsrisiken als Vorschauversion: Control-Flow Enforcement Technology (CET) und Write Exclusive Execute (W^X).
CET ist eine Intel-Technologie, die in einigen neueren Intel- und AMD-Prozessoren verfügbar ist. Sie ergänzt die Hardware mit Schutzmechanismen gegen Control-Flow-Hijacking-Angriffe. .NET 6 unterstützt CET für Windows x64-Apps, und die Funktion muss explizit aktiviert werden. Weitere Informationen finden Sie unter .NET 6-Kompatibilität mit Intel CET-Schattenstapeln.
W^X ist für alle Betriebssysteme mit .NET 6 verfügbar, aber nur standardmäßig auf Apple Silicon aktiviert. W^X blockiert den einfachsten Angriffspfad, indem verhindert wird, dass Speicherseiten gleichzeitig beschreibbar und ausführbar sind.
IL-Kürzung
Das Kürzen eigenständiger Bereitstellungen wurde verbessert. In .NET 5 wurden nur nicht verwendete Assemblys gekürzt. Ab .NET 6 können auch nicht verwendete Typen und Member gekürzt werden. Außerdem sind Kürzungswarnungen jetzt standardmäßig aktiviert. Diese weisen Sie auf Kürzungen hin, bei denen Code entfernt wird, der zur Laufzeit verwendet wird. Weitere Informationen finden Sie unter Kürzen eigenständiger Bereitstellungen und ausführbarer Dateien.
Codeanalyse
Das .NET 6 SDK enthält neue Codeanalysetools für die API-Kompatibilität, die Plattformkompatibilität, die Kürzungssicherheit, die Verwendung von span bei der Zeichenfolgenverkettung und -teilung, schnellere Zeichenfolgen-APIs und schnellere Sammlungs-APIs. Eine vollständige Liste der neuen (und entfernten) Analysetools finden Sie unter Analysetools in .NET 6.
Benutzerdefinierte Plattformwächter
Das Analysetool für Plattformkompatibilität erkennt die Is<Platform>
-Methoden in der Klasse OperatingSystem, zum Beispiel OperatingSystem.IsWindows(), als Plattformwächter. Damit benutzerdefinierte Plattformwächter verwendet werden können, wurden in .NET 6 zwei neue Attribute eingeführt, die Sie für die Kommentierung von Feldern, Eigenschaften oder Methoden mit einem unterstützten oder nicht unterstützten Plattformnamen verwenden können:
Windows Forms
Application.SetDefaultFont(Font) ist eine neue Methode in .NET 6, mit der die Standardschriftart für Ihre Anwendung festgelegt wird.
Die Vorlagen für in C# geschriebene Windows Forms-Apps wurden aktualisiert, damit global using
-Anweisungen, dateibezogene Namespaces und Nullable-Verweistypen unterstützt werden. Darüber hinaus enthalten sie Bootstrap-Anwendungscode, der Codebausteine reduziert und es dem Windows Forms-Designer ermöglicht, die Entwurfsoberfläche in der bevorzugten Schriftart zu rendern. Der Bootstrapcode ist ein Aufruf von ApplicationConfiguration.Initialize()
. Dabei handelt es sich um eine von der Quelle generierte Methode, die Aufrufe an andere Konfigurationsmethoden wie Application.EnableVisualStyles() ausgibt. Wenn Sie über die MSBuild-Eigenschaft ApplicationDefaultFont eine vom Standard abweichende Schriftart festlegen, gibt ApplicationConfiguration.Initialize()
außerdem einen Aufruf an SetDefaultFont(Font) aus.
Weitere Informationen finden Sie im Blogbeitrag Neuerungen in Windows Forms.
Quellbuild
Der Quelltarball, der alle Quellobjekte für das .NET SDK enthält, ist jetzt ein Produkt des .NET SDK-Build. Andere Organisationen wie Red Hat können dann mithilfe dieses Quelltarballs eigene Versionen dieses SDK erstellen.
Zielframeworkmoniker
Es wurden weitere betriebssystemspezifische Zielframeworkmoniker (TFMs) zu .NET 6 hinzugefügt, zum Beispiel net6.0-android
, net6.0-ios
und net6.0-macos
. Weitere Informationen finden Sie unter Betriebssystemspezifische TFMs für .NET 5 und höher.
Generische Mathematik
Die Verwendung von Operatoren in generischen Typen ist in .NET 6 jetzt als Vorschauversion verfügbar. In .NET 6 wurden zahlreiche Schnittstellen eingeführt, die das neue Vorschaufeature von C# 10 verwendet, static abstract
-Schnittstellenmember. Diese Schnittstellen entsprechen verschiedenen Operatoren, z. B. stellt IAdditionOperators
den Operator +
dar. Diese Schnittstellen sind im NuGet-Paket System.Runtime.Experimental enthalten. Weitere Informationen finden Sie im Blogbeitrag Generische Mathematik.
NuGet-Paketvalidierung
NuGet-Bibliotheksentwickler*innen können mit dem neuen Paketvalidierungstool überprüfen, ob ihre Pakete konsistent und gut formatiert sind. Sie können Folgendes herausfinden:
- Ob es Breaking Changes zwischen Paketversionen gibt
- Das Paket verwendet die gleichen öffentlichen APIs für alle runtimespezifischen Implementierungen.
- Ob es Lücken bei der Anwendbarkeit des Zielframeworks oder der Runtime gibt
Weitere Informationen finden Sie im Blogbeitrag Paketvalidierung.
Reflexions-APIs
In .NET 6 werden die folgenden neuen APIs eingeführt, die Code überprüfen und Informationen zur NULL-Zulässigkeit bereitstellen:
- System.Reflection.NullabilityInfo
- System.Reflection.NullabilityInfoContext
- System.Reflection.NullabilityState
Diese APIs sind für reflexionsbasierte Tools und Serialisierungsmodule nützlich.
Microsoft.Extensions-APIs
In .NET 6 wurden an mehreren Erweiterungsnamespaces Verbesserungen vorgenommen. Diese werden in der folgenden Tabelle aufgeführt.
Namespace | Verbesserungen |
---|---|
Microsoft.Extensions.DependencyInjection | CreateAsyncScope ermöglicht die sichere Verwendung einer using -Anweisung für einen Dienstanbieter, der einen IAsyncDisposable-Dienst registriert. |
Microsoft.Extensions.Hosting | Die neuen ConfigureHostOptions-Methoden vereinfachen die Anwendungseinrichtung. |
Microsoft.Extensions.Logging | Microsoft.Extensions.Logging verfügt über einen neuen Quell-Generator für leistungsstarke Protokollierungs-APIs. Der Quell-Generator wird ausgelöst, wenn Sie die neue Klasse LoggerMessageAttribute einer partial -Protokollierungsmethode hinzufügen. Zur Kompilierzeit generiert der Generator die Implementierung der partial -Methode, die in der Regel zur Laufzeit schneller als vorhandene Protokollierungslösungen ist. Weitere Informationen finden Sie unter Quellgenerierung zur Kompilierzeitprotokollierung. |
Neue LINQ-APIs
In .NET 6 wurden zahlreiche LINQ-Methoden hinzugefügt. Für die meisten in der folgenden Tabelle aufgeführten Methoden gibt es äquivalente Methoden im System.Linq.Queryable-Typ.
Methode | BESCHREIBUNG |
---|---|
Enumerable.TryGetNonEnumeratedCount<TSource>(IEnumerable<TSource>, Int32) | Diese Methode versucht, die Anzahl der Elemente in einer Sequenz zu bestimmen, ohne eine Enumeration zu erzwingen. |
Enumerable.Chunk<TSource>(IEnumerable<TSource>, Int32) | Diese Methode teilt die Elemente einer Sequenz in Teile mit einer festgelegten Größe auf. |
Enumerable.MaxBy und Enumerable.MinBy | Diese Methode sucht mithilfe eines Schlüsselselektors nach maximalen oder minimalen Elementen. |
Enumerable.DistinctBy, Enumerable.ExceptBy, Enumerable.IntersectBy und Enumerable.UnionBy | Mit diesen neuen Varianten der Methoden, die setbasierte Vorgänge ausführen, können Sie Gleichheit mithilfe einer Schlüsselselektorfunktion angeben. |
Enumerable.ElementAt<TSource>(IEnumerable<TSource>, Index) und Enumerable.ElementAtOrDefault<TSource>(IEnumerable<TSource>, Index) | Diese Methode akzeptiert Indizes, die vom Anfang oder Ende der Sequenz gezählt werden: Enumerable.Range(1, 10).ElementAt(^2) gibt beispielsweise 9 zurück. |
Enumerable.FirstOrDefault<TSource>(IEnumerable<TSource>, TSource) und Enumerable.FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>, TSource) Enumerable.LastOrDefault<TSource>(IEnumerable<TSource>, TSource) und Enumerable.LastOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>, TSource) Enumerable.SingleOrDefault<TSource>(IEnumerable<TSource>, TSource) und Enumerable.SingleOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>, TSource) |
Mit neuen Überladungen können Sie einen Standardwert angeben, der verwendet werden soll, wenn die Sequenz leer ist. |
Enumerable.Max<TSource>(IEnumerable<TSource>, IComparer<TSource>) und Enumerable.Min<TSource>(IEnumerable<TSource>, IComparer<TSource>) | Mit neuen Überladungen können Sie einen Comparer angeben. |
Enumerable.Take<TSource>(IEnumerable<TSource>, Range) | Diese Methode akzeptiert ein Range-Argument, um das Erstellen eines Slices aus einer Sequenz zu vereinfachen. Beispielsweise können Sie source.Take(2..7) anstelle von source.Take(7).Skip(2) verwenden. |
Enumerable.Zip<TFirst,TSecond,TThird>(IEnumerable<TFirst>, IEnumerable<TSecond>, IEnumerable<TThird>) | Diese Methode erzeugt eine Tupelsequenz mit Elementen aus drei angegebenen Sequenzen. |
Verbesserungen an Datumsangaben, Uhrzeiten und Zeitzonen
In .NET 6 wurden die beiden Strukturen System.DateOnly und System.TimeOnly hinzugefügt. Diese stellen den Datums- bzw. den Uhrzeitteil einer DateTime-Struktur dar. DateOnly eignet sich für Geburtstage und Jubiläen, während TimeOnly für tägliche Wecker und wöchentliche Geschäftszeiten nützlich ist.
Sie können jetzt entweder die IANA-Zeitzonen (Internet Assigned Numbers Authority) oder die Windows-Zeitzonen-IDs auf jedem Betriebssystem verwenden, auf dem Zeitzonendaten installiert sind. Die TimeZoneInfo.FindSystemTimeZoneById(String)-Methode wurde aktualisiert und konvertiert die Eingabe automatisch von einer Windows-Zeitzone in eine IANA-Zeitzone (oder umgekehrt), wenn die angeforderte Zeitzone im System nicht gefunden wird. Die neuen Methoden TryConvertIanaIdToWindowsId(String, String) und TryConvertWindowsIdToIanaId wurden zudem für Szenarios hinzugefügt, in denen Sie immer noch manuell ein Zeitzonenformat in ein anderes konvertieren müssen.
Darüber hinaus wurden weitere Verbesserungen an Zeitzonen vorgenommen. Weitere Informationen finden Sie unter Verbesserungen an Datumsangaben, Uhrzeiten und Zeitzonen in .NET 6.
PriorityQueue-Klasse
Die neue Klasse PriorityQueue<TElement,TPriority> ist eine Sammlung aus Elementen, die über einen Wert und über eine Priorität verfügen. Die Elemente werden in aufsteigender Prioritätsreihenfolge aus der Warteschlange entfernt. Das bedeutet, dass das Element mit dem niedrigsten Prioritätswert zuerst entfernt wird. Diese Klasse implementiert eine min heap-Datenstruktur.