Bagikan melalui


- dan -= operator - pengurangan (minus)

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

Referensi bahasa C# mendokumentasikan versi bahasa C# yang paling baru dirilis. Ini juga berisi dokumentasi awal untuk fitur dalam pratinjau publik untuk rilis bahasa yang akan datang.

Dokumentasi mengidentifikasi fitur apa pun yang pertama kali diperkenalkan dalam tiga versi terakhir bahasa atau dalam pratinjau publik saat ini.

Petunjuk / Saran

Untuk menemukan kapan fitur pertama kali diperkenalkan di C#, lihat artikel tentang riwayat versi bahasa C#.

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 operand tidak null dan daftar pemanggilan operand kanan adalah sublist yang berdampingan yang tepat dari daftar pemanggilan operand sebelah kiri, hasil operasi adalah daftar pemanggilan baru yang Anda dapatkan dengan menghapus entri operand sebelah kanan dari daftar pemanggilan operand sebelah kiri. Jika daftar operand sebelah kanan cocok dengan beberapa sublist yang berdampingan dalam daftar operand sebelah kiri, operasi hanya menghapus sublist yang paling cocok. 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 yang menggunakan -= operator, seperti

x -= y

Setara dengan

x = x - y

Kecuali bahwa x hanya dievaluasi sekali.

Contoh berikut menunjukkan cara menggunakan -= 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 -. Saat Anda membebani operator biner - secara implisit, Anda juga secara implisit membebani -= operator. 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