- és -= operátorok - kivonás (mínusz)
Az -
operátorokat a -=
beépített integrál- és lebegőpontos numerikus típusok és delegálási típusok támogatják.
Az aritmetikai -
operátorral kapcsolatos információkért lásd az Unary plusz és mínusz operátorokat és a Kivonás operátort – az Aritmetikai operátorok cikkének szakaszait.
Delegálás eltávolítása
Az azonos delegált típusú operandusok esetében az -
operátor egy delegált példányt ad vissza, amely a következőképpen lesz kiszámítva:
Ha mindkét operandus nem null értékű, és a jobb oldali operandus meghívási listája a bal oldali operandus meghívási listájának megfelelő egybefüggő allistája, a művelet eredménye egy új meghívási lista, amely a jobb oldali operandus bejegyzéseinek a bal oldali operandus meghívási listájából való eltávolításával érhető el. Ha a jobb oldali operandus listája megegyezik a bal oldali operandus listájában található több egybefüggő allistával, csak a jobb oldali allista lesz eltávolítva. Ha az eltávolítás üres listát eredményez, az eredmény a következő
null
: .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
Ha a jobb oldali operandus meghívási listája nem a bal oldali operandus meghívási listájának megfelelő egybefüggő allistája, a művelet eredménye a bal oldali operandus lesz. Ha például eltávolít egy olyan meghatalmazottat, amely nem része a csoportos küldési meghatalmazottnak, nem tesz semmit, és a csoportos küldési meghatalmazott nem változik.
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
Az előző példa azt is szemlélteti, hogy a delegált eltávolítása során a delegált példányok összehasonlítva vannak. Az azonos lambdakifejezések kiértékelése során előállított meghatalmazottak például nem egyenlők . A delegált egyenlőségről további információt a C# nyelvi specifikációjának Delegálási egyenlőség operátorok című szakaszában talál.
Ha a bal oldali operandus az
null
, akkor a művelet eredménye .null
Ha a jobb oldali operandus aznull
, a művelet eredménye a bal oldali operandus.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
A meghatalmazottak kombinálásához használja az operátort+
.
A delegálttípusokról további információt a Meghatalmazottak című témakörben talál.
Kivonás-hozzárendelés operátora –=
Az operátort -=
használó kifejezés, például
x -= y
egyenértékű a
x = x - y
kivéve, hogy csak x
egyszer van kiértékelve.
Az alábbi példa az operátor használatát -=
mutatja be:
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
Az operátorral -=
egy eseménykezelő metódust is megadhat, amely eltávolítható az eseményről való leiratkozáskor. További információ: Hogyan iratkozhat fel és iratkozhat le az eseményekről.
Operátorok túlterhelése
A felhasználó által definiált típus túlterhelheti az operátort-
. Ha egy bináris -
operátor túlterhelt, az -=
operátor implicit módon túlterhelt is. A felhasználó által definiált típus nem tudja explicit módon túlterhelni az operátort -=
.
C# nyelvspecifikáció
További információt a C# nyelvi specifikációjának Unary mínusz operátor és Kivonás operátor szakaszában talál.