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 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
nulldan 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 adalahnull.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 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 .