- 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 olur null. Sağ işlenen ise null, 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.

Ayrıca bkz.