Bagikan melalui


- dan -= operator - pengurangan (minus)

Operator - dan -= didukung oleh jenis numerik integral dan floating-point bawaan dan jenis delegasi.

Untuk informasi tentang operator aritmetika -, lihat bagian Operator plus dan minus Unary serta Operator pengurangan - dari artikel Operator aritmetika.

Mendelegasikan penghapusan

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

  • Jika kedua operand adalah non-null dan daftar pemanggilan operand sisi-kanan adalah sublist yang berdampingan yang tepat dari daftar pemanggilan operand sisi-kiri, hasil operasi adalah daftar pemanggilan baru yang diperoleh dengan menghapus entri operand sisi-kanan dari daftar pemanggilan operand sisi-kiri. Jika daftar operand sisi-kanan cocok dengan beberapa sublist yang berdampingan di dalam daftar operand sisi-kiri, hanya sublist yang paling cocok yang dihapus. Jika penghapusan menghasilkan daftar yang 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 yang berdampingan yang tepat 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 yang dibandingkan. Misalnya, delegasi yang dihasilkan dari evaluasi ekspresi lambda yang identik tidak sama. Untuk informasi selengkapnya tentang mendelegasikan kesetaraan, lihat bagian Mendelegasikan operator kesetaraan dari spesifikasi bahasa C#.

  • Jika operand sisi-kiri adalah null, hasil operasinya adalah null. Jika operand sisi-kanan adalah null, hasil operasinya adalah operand sisi-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 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 aktivitas saat berhenti berlangganan dari peristiwa. Untuk informasi selengkapnya, lihat Cara berlangganan dan berhenti berlangganan dari peristiwa.

Kelebihan beban operator

Jenis yang ditentukan pengguna dapat membebani operator - secara berlebihan. Ketika operator - biner kelebihan beban, operator -= juga secara implisit kelebihan beban. Jenis yang ditentukan pengguna tidak dapat secara eksplisit membebani -= operator.

Spesifikasi bahasa C#

Untuk informasi selengkapnya, lihat bagian Operator Unary minus dan Operator pengurangan dari spesifikasi bahasa C#.

Lihat juga