Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De ingebouwde integrale en drijvende komma numerieke typen en gedelegeerdentypen ondersteunen allemaal de -
en -=
operators.
Zie de -
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
Het voorgaande voorbeeld laat ook zien dat tijdens het verwijderen van gedelegeerden vergelijking van gedelegeerde instanties plaatsvindt. Zo zijn afgevaardigden die zijn geproduceerd op basis van de evaluatie van identieke lambda-expressies niet gelijk. Zie de sectie Gelijkheidsoperatoren voor delegaten van de C#-taalspecificatie voor meer informatie over gelijkheid van delegaten.
Als de linkeroperand
null
is, is het resultaat van de bewerkingnull
. Als de rechteroperandnull
is, is 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.
Aftrekkingstoewijzingsoperator -=
Een expressie met behulp van de -=
operator, zoals
x -= y
Is gelijk aan
x = x - y
Behalve dat 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 Abonneren op en afmelden voor gebeurtenissenvoor meer informatie.
Overbelasting van operatoren
Een door de gebruiker gedefinieerd type kan de operator -
. Wanneer een binaire -
operator overbelast is, wordt de -=
operator ook impliciet overbelast. Vanaf C# 14 kan een door de gebruiker gedefinieerd type de -=
operator expliciet overbelasten om een efficiƫntere implementatie te bieden. Normaal gesproken overbelast een type de -=
operator omdat de waarde kan worden bijgewerkt in plaats van een nieuw exemplaar toe te wijzen om het resultaat van de aftrekking op te slaan. Als een type geen expliciete overbelasting biedt, genereert de compiler de impliciete overbelasting.
C#-taalspecificatie
Zie de secties Unary minus operator en Aftrekken operator van de C#-taalspecificatie voor meer informatie. Zie de door de gebruiker gedefinieerde functiespecificatie voor samengestelde toewijzingen voor meer informatie over het overbelasten van de samengestelde toewijzingsoperatoren in C# 14 en hoger.