Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die integrierten Delegattypen sowie integrale und gleitkommazahlige numerische Typen unterstützen alle die - und -= Operatoren.
Die C#-Sprachreferenz dokumentiert die zuletzt veröffentlichte Version der C#-Sprache. Außerdem enthält sie eine erste Dokumentation zu Funktionen in der öffentlichen Vorschau für die kommende Sprachversion.
In der Dokumentation werden alle Features identifiziert, die in den letzten drei Versionen der Sprache oder in der aktuellen öffentlichen Vorschau eingeführt wurden.
Tipp
Informationen dazu, wann ein Feature erstmals in C# eingeführt wurde, finden Sie im Artikel zum Versionsverlauf der C#-Sprache.
Informationen zum arithmetischen - Operator finden Sie in den Abschnitten Unärer Plus- und Minusoperator und Subtraktionsoperator des Artikels Arithmetische Operatoren.
Entfernen von Delegierten
Für Operanden desselben Delegattyps gibt der - Operator eine Delegateninstanz zurück, die wie folgt berechnet wird:
Wenn beide Operanden nicht
nullvorhanden sind und die Aufrufliste des rechten Operanden eine ordnungsgemäße zusammenhängende Unterliste der Aufrufliste des linken Operanden ist, ist das Ergebnis der Operation eine neue Aufrufliste, die Sie erhalten, indem Sie die Einträge des rechten Operanden aus der Aufrufliste des linken Operanden entfernen. Wenn die Liste des rechten Operanden mehreren zusammenhängenden Unterlisten in der Liste der linken Operanden entspricht, entfernt der Vorgang nur die am rechten Rand übereinstimmende Unterliste. Wenn das Entfernen zu einer leeren Liste führt, lautetnulldas Ergebnis .Action a = () => Console.Write("a"); Action b = () => Console.Write("b"); var abbaab = a + b + b + a + a + b; abbaab(); // output: abbaab Console.WriteLine(); var ab = a + b; var abba = abbaab - ab; abba(); // output: abba Console.WriteLine(); var nihil = abbaab - abbaab; Console.WriteLine(nihil is null); // output: TrueWenn es sich bei der Aufrufliste des rechten Operanden nicht um eine ordnungsgemäße zusammenhängende Unterliste der Aufrufliste des linken Operanden handelt, ist das Ergebnis des Vorgangs der linke Operand. Beispielsweise bewirkt das Entfernen eines Delegaten, der nicht Teil des Multicastdelegats ist, nichts und führt zu dem unveränderten Multicastdelegat.
Action a = () => Console.Write("a"); Action b = () => Console.Write("b"); var abbaab = a + b + b + a + a + b; var aba = a + b + a; var first = abbaab - aba; first(); // output: abbaab Console.WriteLine(); Console.WriteLine(object.ReferenceEquals(abbaab, first)); // output: True Action a2 = () => Console.Write("a"); var changed = aba - a; changed(); // output: ab Console.WriteLine(); var unchanged = aba - a2; unchanged(); // output: aba Console.WriteLine(); Console.WriteLine(object.ReferenceEquals(aba, unchanged)); // output: TrueDas vorherige Beispiel veranschaulicht auch, dass Delegatinstanzen beim Entfernen von Delegaten verglichen werden. Delegaten, die durch die Auswertung identischer Lambdaausdrücke erzeugt werden, sind beispielsweise nicht gleich. Weitere Informationen zur Stellvertretungsgleichstellung finden Sie im Abschnitt " Stellvertretungs-Gleichheitsoperatoren " der C#-Sprachspezifikation.
Wenn der linke Operand
nullist, ist das Ergebnis des Vorgangsnull. Ist der rechte Operandnull, ist das Ergebnis des Vorgangs der linke Operand.Action a = () => Console.Write("a"); var nothing = null - a; Console.WriteLine(nothing is null); // output: True var first = a - null; a(); // output: a Console.WriteLine(); Console.WriteLine(object.ReferenceEquals(first, a)); // output: True
Verwenden Sie den + Operator zur Kombination von Delegaten.
Weitere Informationen zu Stellvertretungstypen finden Sie unter Delegaten.
Subtraktionszuweisungsoperator -=
Ein Ausdruck, der den -= Operator verwendet, z. B.
x -= y
Ist äquivalent zu
x = x - y
Mit der Ausnahme, dass x nur einmal ausgewertet wird.
Im folgenden Beispiel wird die Verwendung des -= Operators veranschaulicht:
int i = 5;
i -= 9;
Console.WriteLine(i);
// Output: -4
Action a = () => Console.Write("a");
Action b = () => Console.Write("b");
var printer = a + b + a;
printer(); // output: aba
Console.WriteLine();
printer -= a;
printer(); // output: ab
Sie verwenden auch den -= Operator, um eine Ereignishandlermethode anzugeben, die entfernt werden soll, wenn Sie ein Ereignis kündigen. Weitere Informationen finden Sie unter Abonnieren und Kündigen von Ereignissen.
Operatorüberladbarkeit
Ein benutzerdefinierter Typ kann den Operator -. Wenn Sie einen binären - Operator überladen, überladen Sie den -= Operator implizit. Ab C# 14 kann ein benutzerdefinierter Typ den -= Operator explizit überladen, um eine effizientere Implementierung bereitzustellen. In der Regel überlastet ein Typ den -= Operator, da der Wert direkt aktualisiert werden kann, anstatt eine neue Instanz zuzuweisen, um das Ergebnis der Subtraktion zu speichern. Wenn ein Typ keine explizite Überladung bereitstellt, generiert der Compiler die implizite Überladung.
C#-Sprachspezifikation
Weitere Informationen finden Sie in den Abschnitten " Unary minus" und " Subtraktionsoperator " der C#-Sprachspezifikation. Weitere Informationen zum Überladen der Verbundzuordnungsoperatoren in C# 14 und höher finden Sie in der benutzerdefinierten Spezifikation der zusammengesetzten Zuordnungsfunktion .