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.
Operator =
penugasan mengatur nilai dari operand di sisi kanannya ke variabel, properti, atau elemen pengindeks yang ditentukan oleh operand di sisi kirinya. Hasil dari ekspresi penugasan adalah nilai yang diberikan ke operand sebelah kiri. Jenis operand sisi-kanan harus sama dengan jenis operand sisi-kiri atau secara implisit dapat dikonversi ke dalamnya.
Operator penugasan =
bersifat asosiasi ke kanan, yaitu, 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
Operand penugasan di sebelah kiri menerima nilai dari operand di sebelah kanan. Saat operand adalah jenis nilai, penetapan menyalin konten operand sebelah kanan. Ketika operand adalah jenis referensi, penetapan menyalin referensi ke objek.
Operasi ini disebut penetapan nilai: nilai ditetapkan.
Dimulai dengan C# 14, sisi kiri penetapan nilai dapat menyertakan ekspresi anggota kondisional null, seperti ?.
atau ?[]
. Jika sisi kiri null, ekspresi sisi kanan tidak dievaluasi.
penetapan ref
Penetapan Ref menjadikan operan di sebelah kiri sebagai alias untuk operan di sebelah kanan, seperti dalam 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 referensi lokal diinisialisasi sebagai alias ke elemen array pertama. Kemudian, ref
dialihkan kembali untuk merujuk ke elemen terakhir array. 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.
Penugasan ref
berarti bahwa variabel referensi memiliki referensi yang berbeda. Ini tidak lagi merujuk pada acuannya yang sebelumnya. Menggunakan ref =
pada parameter ref
berarti parameter tidak lagi mengacu pada argumennya. Setiap tindakan yang mengubah status objek setelah ref dialihkan akan membuat modifikasi tersebut pada item baru. Misalnya, pertimbangkan metode berikut:
private static void RefReassignAndModify(scoped ref string s)
{
string sLocal = "Hello";
Console.WriteLine(sLocal); // Output: Hello
s = ref sLocal;
s = "World";
Console.WriteLine(s); // Output: World
Penggunaan berikut menunjukkan bahwa penugasan ke parameter s
tidak terlihat setelah panggilan metode karena s
ref
ditetapkan kembali untuk merujuk ke sLocal
sebelum string diubah:
string msg = "Hi";
RefReassignAndModify(ref msg);
Console.WriteLine(msg); // Output: Hi!
Penugasan gabungan
Untuk operator biner op
, ekspresi penetapan campuran berbentuk
x op= y
Setara dengan
x = x op y
Kecuali bahwa x
hanya dievaluasi sekali.
Operator aritmatika, logika Boolean, dan logika bitwise dan shift semuanya mendukung penetapan majemuk.
Penetapan penggabungan-null
Anda dapat menggunakan operator penugasan null-coalescing ??=
untuk menetapkan nilai operand sebelah kanannya ke operand sebelah kirinya jika dan hanya jika operand sebelah kiri bernilai null
. Untuk informasi selengkapnya, lihat artikel ??
dan operator ??=
.
Kelebihan beban operator
Jenis yang ditentukan pengguna tidak dapat membebani operator penugasan secara berlebihan. Namun, tipe yang ditentukan pengguna dapat menentukan konversi implisit ke tipe 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.
Jika tipe yang ditentukan pengguna membebani operator biner op
, operator op=
, jika ada, juga secara implisit dibebani. Dimulai dengan C# 14, jenis yang ditentukan pengguna dapat secara eksplisit membebani operator penetapan majemuk (op=
) untuk memberikan implementasi yang lebih efisien. Biasanya, jenis membebani operator ini karena nilainya dapat diperbarui, daripada mengalokasikan instans baru untuk menahan hasil operasi biner. Jika jenis tidak memberikan kelebihan beban eksplisit, pengkompilasi menghasilkan kelebihan beban implisit.
Spesifikasi bahasa C#
Untuk informasi selengkapnya, lihat bagian Operator penugasan dari spesifikasi bahasa C# dan spesifikasi fitur penetapan majemuk yang ditentukan pengguna .