- en -= operatoren - aftrekken (minteken)
De -
operators -=
en operators worden ondersteund door de ingebouwde integrale en numerieke typen drijvende komma en gedelegeerde typen.
Zie de unaire plus- en min-operatoren en de aftrekkingsoperator ( secties van het artikel Rekenkundige operatoren) voor meer informatie over de rekenkundige -
operator.
Verwijdering delegeren
Voor operanden van hetzelfde gemachtigdetype retourneert de -
operator een gemachtigde instantie die als volgt wordt berekend:
Als beide operanden niet null zijn en de aanroeplijst van de rechteroperand een juiste aaneengesloten sublijst van de aanroeplijst van de linkeroperand is, is het resultaat van de bewerking een nieuwe aanroeplijst die wordt verkregen door de vermeldingen van de rechteroperand te verwijderen uit de lijst met aanroepen van de linkeroperand. Als de lijst van de rechteroperand overeenkomt met meerdere aaneengesloten sublijsten in de lijst van de linkeroperand, wordt alleen de meest rechts overeenkomende sublijst verwijderd. Als het verwijderen resulteert in een lege lijst, is
null
het resultaat .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: True
Als de aanroeplijst van de rechteroperand geen juiste aaneengesloten sublijst van de aanroeplijst van de linkeroperand is, is het resultaat van de bewerking de linkeroperand. Als u bijvoorbeeld een gemachtigde verwijdert die geen deel uitmaakt van de multicast-gemachtigde, doet dit niets en resulteert dit in de ongewijzigde multicast-gemachtigde.
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: True
In het voorgaande voorbeeld ziet u ook dat tijdens het verwijderen van gemachtigden gedelegeerden worden vergeleken. Zo zijn gedelegeerden die zijn geproduceerd op basis van de evaluatie van identieke lambda-expressies niet gelijk. Zie de sectie Gelijkheidsoperatoren delegeren van de C#-taalspecificatie voor meer informatie over gelijkheid van gemachtigden.
Als de linkeroperand is, is
null
null
het resultaat van de bewerking . Als de rechteroperand is, isnull
het resultaat van de bewerking de linkeroperand.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
Als u gemachtigden wilt combineren, gebruikt u de +
operator.
Zie Gemachtigden voor meer informatie over typen gemachtigden.
Toewijzingsoperator aftrekken -=
Een expressie met behulp van de -=
operator, zoals
x -= y
is gelijk aan
x = x - y
behalve dat dit x
slechts eenmaal wordt geƫvalueerd.
In het volgende voorbeeld ziet u het gebruik van de -=
operator:
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
U gebruikt de -=
operator ook om een gebeurtenishandlermethode op te geven die moet worden verwijderd wanneer u zich afmeldt voor een gebeurtenis. Zie Hoe u zich kunt abonneren op en afmelden voor gebeurtenissen voor meer informatie.
Overbelasting van operatoren
Een door de gebruiker gedefinieerd type kan de -
operator overbelasten. Wanneer een binaire -
operator overbelast is, wordt de -=
operator ook impliciet overbelast. Een door de gebruiker gedefinieerd type kan de -=
operator niet expliciet overbelasten.
C#-taalspecificatie
Zie de secties Unary minus operator en Aftrekken operator van de C#-taalspecificatie voor meer informatie.