Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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: TrueJika 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: TrueContoh 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 adalahnull. Jika operand sebelah kanan adalahnull, 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 .