Bagikan melalui


- dan -= operator - pengurangan (minus)

Jenis numerik bawaan integral dan floating-point serta jenis delegasi semuanya mendukung - dan -= operator.

Untuk informasi tentang operator aritmatika -, lihat bagian operator Unary plus dan minus serta operator Pengurangan - pada artikel operator Aritmatika.

Penghapusan delegasi

Untuk operan dengan jenis delegasi yang sama, - operator mengembalikan instans delegasi yang dihitung sebagai berikut:

  • Jika kedua operan tidak bernilai null dan daftar pemanggilan operand kanan adalah sublist yang terpisah dengan tepat dari daftar pemanggilan operand sebelah kiri, hasil operasi adalah daftar pemanggilan baru yang diperoleh dengan menghapus entri operand sebelah kanan dari daftar pemanggilan operand sebelah kiri. Jika daftar operand sebelah kanan cocok dengan beberapa sublist berdampingan dalam daftar operand sebelah kiri, hanya sublist yang cocok paling kanan yang dihapus. Jika penghapusan menghasilkan daftar kosong, hasilnya adalah 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
    
  • Jika daftar pemanggilan operand sebelah kanan bukan sublist berurutan yang sesuai dari daftar pemanggilan operand sebelah kiri, hasil operasi adalah operand sebelah kiri. Misalnya, menghapus delegasi yang bukan bagian dari delegasi multicast tidak melakukan apa pun dan menghasilkan delegasi multicast yang tidak berubah.

    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
    

    Contoh sebelumnya juga menunjukkan bahwa selama penghapusan delegasi, instans delegasi dibandingkan. Misalnya, delegasi yang dihasilkan dari evaluasi ekspresi lambda yang identik tidak sama. Untuk informasi selengkapnya tentang mendelegasikan kesetaraan, lihat bagian Delegasikan operator kesetaraan dari spesifikasi bahasa C#.

  • Jika operand sebelah kiri adalah null, hasil operasinya adalah null. Jika operand sebelah kanan adalah null, hasil operasi adalah operand sebelah kiri.

    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
    

Untuk menggabungkan delegasi, gunakan + operator.

Untuk informasi selengkapnya tentang jenis delegasi, lihat Delegasi .

Operator penugasan pengurangan -=

Ekspresi menggunakan operator -=, seperti

x -= y

Setara dengan

x = x - y

Kecuali bahwa x hanya dievaluasi sekali.

Contoh berikut menunjukkan penggunaan 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

Anda juga menggunakan operator -= untuk menentukan metode penanganan acara yang akan dihapus saat berhenti berlangganan dari acara. Untuk informasi selengkapnya, lihat Cara berlangganan dan berhenti berlangganan dari acara.

Kelebihan beban operator

Jenis yang ditentukan pengguna dapat kelebihan beban operator -. Ketika operator - biner kelebihan beban, operator -= juga secara implisit kelebihan beban. Dimulai dengan C# 14, jenis yang ditentukan pengguna dapat secara eksplisit membebani -= operator untuk memberikan implementasi yang lebih efisien. Biasanya, tipe melakukan overload pada operator -= karena nilainya dapat diperbarui langsung, bukan mengalokasikan instans baru untuk menyimpan hasil pengurangan. Jika jenis tidak memberikan kelebihan beban eksplisit, pengkompilasi menghasilkan kelebihan beban implisit.

Spesifikasi bahasa C#

Untuk informasi selengkapnya, lihat bagian Operator minus unary dan Operator penguranganspesifikasi bahasa C#. Untuk informasi selengkapnya tentang kelebihan beban operator penetapan majemuk di C# 14 dan yang lebih baru, lihat spesifikasi fitur penetapan majemuk yang ditentukan pengguna .

Lihat juga