Operator penugasan (referensi C#)
Operator =
penugasan menetapkan nilai operand tangan kanannya ke variabel, properti, atau elemen pengindeks yang diberikan oleh operand sebelah kirinya. Hasil ekspresi penugasan adalah nilai yang ditetapkan ke operand sisi-kiri. Jenis operand sisi-kanan harus sama dengan jenis operand sisi-kiri atau secara implisit dapat dikonversi ke dalamnya.
Operator penugasan =
bersifat hak-asosiatif, yakni, ekspresi dari bentuk tersebut
a = b = c
dievaluasi sebagai
a = (b = c)
Contoh berikut menunjukkan penggunaan operator penugasan dengan variabel lokal, properti, dan elemen pengindeks sebagai operand sisi-kirinya:
List<double> numbers = [1.0, 2.0, 3.0];
Console.WriteLine(numbers.Capacity);
numbers.Capacity = 100;
Console.WriteLine(numbers.Capacity);
// Output:
// 4
// 100
int newFirstElement;
double originalFirstElement = numbers[0];
newFirstElement = 5;
numbers[0] = newFirstElement;
Console.WriteLine(originalFirstElement);
Console.WriteLine(numbers[0]);
// Output:
// 1
// 5
Operan sebelah kiri tugas menerima nilai operand tangan kanan. Saat operand adalah jenis nilai, penetapan menyalin konten operand sebelah kanan. Ketika operand adalah jenis referensi, penetapan menyalin referensi ke objek.
Ini disebut penetapan nilai: nilai ditetapkan.
penetapan ref
Penetapan = ref
Ref menjadikan operan sebelah kirinya sebagai alias ke operand sebelah kanan, seperti yang ditunjukkan contoh berikut:
void Display(double[] s) => Console.WriteLine(string.Join(" ", s));
double[] arr = { 0.0, 0.0, 0.0 };
Display(arr);
ref double arrayElement = ref arr[0];
arrayElement = 3.0;
Display(arr);
arrayElement = ref arr[arr.Length - 1];
arrayElement = 5.0;
Display(arr);
// Output:
// 0 0 0
// 3 0 0
// 3 0 5
Dalam contoh sebelumnya, variabel arrayElement
referensi lokal diinisialisasi sebagai alias ke elemen array pertama. Kemudian, ditetapkan ref
kembali untuk merujuk ke elemen array terakhir. Karena ini adalah alias, ketika Anda memperbarui nilainya dengan operator =
penugasan biasa , elemen array yang sesuai juga diperbarui.
Operan ref
tugas sebelah kiri dapat berupa variabel referensi lokal, ref
bidang, dan ref
parameter metode , out
, atau in
. Kedua operan harus berjenis yang sama.
Penetapan campuran
Untuk op
operator biner, ekspresi penetapan campuran dari formulir
x op= y
setara dengan:
x = x op y
kecuali x
hanya dievaluasi sekali.
Penugasan gabungan didukung oleh operator logis aritmetika, logis Boolean, dan operator bitwise logis dan shift.
Penetapan penggabungan-null
Anda dapat menggunakan operator ??=
penugasan null-coalescing untuk menetapkan nilai operand tangan kanannya ke operand sebelah kirinya hanya jika operand sebelah kiri mengevaluasi ke null
. Untuk informasi selengkapnya, lihat artikel operator ?? dan ??=.
Kelebihan beban operator
Jenis yang ditentukan pengguna tidak dapat membebani operator penugasan secara berlebihan. Namun, jenis yang ditentukan-pengguna dapat menentukan konversi yang implisit ke jenis lainnya. Dengan begitu, nilai jenis yang ditentukan-pengguna dapat ditetapkan ke variabel, properti, atau elemen pengindeks dari jenis lain. Untuk informasi selengkapnya, lihat Operator konversi yang ditentukan pengguna.
Jenis yang ditentukan pengguna tidak dapat secara eksplisit membebani operator penetapan majemuk. Namun, jika jenis yang ditentukan pengguna membebani operator biner op
, operator op=
, jika ada, juga secara implisit kelebihan beban.
Spesifikasi bahasa C#
Untuk informasi selengkapnya, lihat bagian Operator penugasan dari Spesifikasi bahasa C#.