C# short
Aritmetik: Kehalusan
Menambah dua short
pembolehubah dalam C# secara langsung, seperti ini:
<code class="language-csharp">short a, b; a = 10; b = 10; a = a + b; // Error: Cannot implicitly convert type 'int' to 'short'</code>
menghasilkan ralat pengkompil. Sebabnya? Jumlah dua nilai short
secara tersirat dinaikkan pangkat kepada int
. Menugaskan int
kepada pembolehubah short
memerlukan hantaran eksplisit, yang tiada dalam kod ini.
Anehnya, pengendali penugasan kompaun =
berfungsi tanpa ralat:
<code class="language-csharp">a += b; // Works correctly</code>
Kenapa perbezaannya?
Rahsia =
Operator
Pengendali =
bukan sekadar gula sintaksis; ia adalah ciri bahasa yang direka dengan teliti. Walaupun fungsinya bersamaan dengan a = a b
, pengkompil melayannya secara berbeza. Spesifikasi C# menentukan bahawa pengendali penugasan kompaun melakukan penukaran tersirat daripada hasil operasi kepada jenis operan sebelah kiri.
Pada dasarnya, a = b
dikendalikan secara tersirat sebagai a = (short)(a b)
. Pengkompil secara automatik memasukkan cast yang diperlukan ke short
, mengelakkan ralat tidak padan jenis.
Pemutus tersirat ini merupakan aspek penting dalam reka bentuk C#. Tanpa itu, banyak operasi aritmetik biasa yang melibatkan jenis integer yang lebih kecil akan memerlukan pemutus eksplisit, menambah kerumitan yang ketara pada kod.
Pendek kata (Pun Niat)
Isu teras ialah promosi jenis tersirat short short
kepada int
. Pengendali =
bijak memintas perkara ini dengan memasukkan lakonan tersirat, menjadikannya cara yang mudah dan cekap untuk melaksanakan operasi aritmetik pada jenis integer yang lebih kecil tanpa penukaran jenis eksplisit.
Atas ialah kandungan terperinci Mengapakah `a = b` Berfungsi Semasa `a = a b` Gagal Apabila `a` dan `b` adalah `short` dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!