- ve -= işleçleri - çıkarma (eksi)
-
ve -=
işleçleri yerleşik tamsayı ve kayan nokta sayısal türleri ve temsilci türleri tarafından desteklenir.
Aritmetik işleç hakkında bilgi için Aritmetik -
işleçler makalesinin Birli artı ve eksi işleçleri ile Çıkarma işleci - bölümlerine bakın.
Temsilci kaldırma
Aynı temsilci türündeki işlenenler için işleç aşağıdaki -
gibi hesaplanan bir temsilci örneği döndürür:
her iki işlenen de null değilse ve sağ işlenenin çağrı listesi sol işlenenin çağrı listesinin uygun bir bitişik alt listesiyse, işlemin sonucu sağ işlenenin girdileri sol işlenenin çağrı listesinden kaldırılarak elde edilen yeni bir çağırma listesidir. Sağ işlenenin listesi sol işlenenin listesindeki birden çok bitişik alt listeyle eşleşiyorsa, yalnızca en sağdaki eşleşen alt liste kaldırılır. Kaldırma işlemi boş bir listeye neden olursa sonuç olur
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
Sağ işlenenin çağrı listesi, sol işlenenin çağrı listesinin düzgün bir bitişik alt listesi değilse, işlemin sonucu sol işlenendir. Örneğin, çok noktaya yayın temsilcisinin parçası olmayan bir temsilciyi kaldırmak hiçbir şey yapmaz ve değişmemiş çok noktaya yayın temsilcisine neden olur.
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
Yukarıdaki örnek, temsilci kaldırma sırasında temsilci örneklerinin karşılaştırıldığını da gösterir. Örneğin, özdeş lambda ifadelerinin değerlendirilmesinden oluşturulan temsilciler eşit değildir. Temsilci eşitliği hakkında daha fazla bilgi için C# dil belirtiminin Temsilci eşitliği işleçleri bölümüne bakın.
Sol işlenen ise
null
, işlemin sonucu olurnull
. Sağ işlenen isenull
, işlemin sonucu sol işlenendir.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
Temsilcileri birleştirmek için işlecini +
kullanın.
Temsilci türleri hakkında daha fazla bilgi için bkz . Temsilciler.
Çıkarma atama işleci -=
işlecini -=
kullanan bir ifade, örneğin
x -= y
eşdeğerdir
x = x - y
ancak bu x
yalnızca bir kez değerlendirilir.
Aşağıdaki örnekte işlecin kullanımı gösterilmektedir -=
:
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
Ayrıca, bir olay aboneliğini kaldırdığınızda kaldırılacak bir olay işleyici yöntemi belirtmek için işlecini kullanırsınız-=
. Daha fazla bilgi için bkz . Olaylara abone olma ve abonelikten çıkma.
İşleç aşırı yüklenebilirliği
Kullanıcı tanımlı bir tür işleci aşırı yükleyebilir -
. bir ikili -
işleç aşırı yüklendiğinde, -=
işleç de örtük olarak aşırı yüklenir. Kullanıcı tanımlı bir tür açıkça işleci aşırı yükleyemez -=
.
C# dili belirtimi
Daha fazla bilgi için C# dil belirtiminin Birli eksi işleci ve Çıkarma işleci bölümlerine bakın.