Judulnya menyesatkan, jadi silakan baca seluruh pertanyaan :-) .
Dengan "senyawa operator penugasan" Aku ada dalam pikiran konstruk seperti ini op=
, misalnya +=
. Operator penugasan murni ( =
) bukan milik pertanyaan saya.
Dengan "mengapa" saya tidak bermaksud pendapat, tetapi sumber daya (buku, artikel, dll) ketika beberapa desainer, atau rekan kerja mereka, dll mengungkapkan alasan mereka (yaitu sumber pilihan desain).
Saya bingung dengan asimetri yang ditemukan di C ++ dan C # ( ya, saya tahu C # bukan C ++ 2.0 ) - di C ++ Anda akan membebani operator +=
dan kemudian secara otomatis menulis +
operator yang sesuai dengan mengandalkan operator yang ditentukan sebelumnya. Dalam C # itu terbalik - Anda kelebihan +
dan +=
disintesis untuk Anda.
Jika saya tidak salah, pendekatan selanjutnya akan membunuh peluang untuk optimasi dalam kasus aktual +=
, karena objek baru harus dibuat. Jadi harus ada beberapa keuntungan besar dari pendekatan semacam itu, tetapi MSDN terlalu malu untuk menceritakannya.
Dan saya ingin tahu apa keuntungannya - jadi jika Anda melihat penjelasan di beberapa buku C #, video tech-talk, entri blog, saya akan berterima kasih atas rujukannya.
Hal terdekat yang saya temukan adalah komentar di blog Eric Lippert. Mengapa operator yang kelebihan beban selalu statis di C #? oleh Tom Brown. Jika overloading statis diputuskan terlebih dahulu, itu hanya menentukan operator mana yang dapat kelebihan beban untuk struct. Ini lebih lanjut menentukan apa yang bisa kelebihan beban untuk kelas.
*=
mutasi jenis referensi secara semantik salah.
+=
pertama tampaknya tidak masuk akal; mengapa Anda membebani operasi gabungan daripada bagian-bagiannya?