Aracılığıyla paylaş


Atama işleçleri (C# referansı)

Atama işleci = sağ işleneninin değerini, sol işleneni tarafından verilen bir değişkene, özelliğe veya indeksleyici öğesine atar. Atama ifadesinin sonucu, sol işlenene atanan değerdir. Sağ işlecin türü, sol işlecin türüyle aynı olmalı veya ona örtük olarak dönüştürülebilen türde olmalıdır.

Atama işleci = sağa dayalıdır, yani bir form ifadesidir.

a = b = c

Şu şekilde değerlendirilir:

a = (b = c)

Aşağıdaki örnek, atama işlecinin yerel değişken, özellik ve dizinleyici ile sol operand olarak kullanımını gösterir.

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

Atama işleminin sol tarafındaki işlenen, sağdaki işlenenin değerini alır. İşlenenler değer türlerinde olduğunda, atama sağ işlenenin içeriğini kopyalar. İşlenenler referans türündeyse, atama nesneye referansı kopyalar.

Bu işleme değer atamasıadı verilir: değer atanır.

C# 14'ten itibaren, değer atamasının sol tarafında null koşullu üye ifadesi, ?. veya ?[] gibi, bulunabilir. Sol taraf null ise, sağ taraftaki ifade değerlendirilmez.

referans görevlendirmesi

Referans ataması= ref, aşağıdaki örnekte gösterildiği gibi sol işleneni sağ işlenene bir takma ad yapar:

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

Yukarıdaki örnekte, yerel başvuru değişkeniarrayElement ilk dizi öğesinin diğer adı olarak başlatılır. Ardından, ref son dizi öğesini göstermek üzere yeniden ayarlanır. Bir takma ad olduğundan, değerini sıradan bir atama işleciyle = güncellediğinizde, ilgili dizi öğesi de güncellenir.

Atamanın sol işleneni refyerel başvuru değişkeni, refalan ve ref, out veya in yöntem parametresi olabilir. Her iki operand da aynı türde olmalıdır.

ref tanımlaması, bir referans değişkeninin farklı bir referanta sahip olduğu anlamına gelir. Artık önceki atıfına/bağlantısına atıfta bulunmamaktadır. ref = parametresinde ref kullanılması, parametrenin artık bağımsız değişkenine başvurmadığı anlamına gelir. Ref yeniden atadıktan sonra nesnenin durumunu değiştiren tüm eylemler bu değişiklikleri yeni öğede yapar. Örneğin, aşağıdaki yöntemi göz önünde bulundurun:

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

Aşağıdaki kullanım, ss'e referans olacak şekilde yeniden atandığı için yöntem çağrısından sonra ref parametresine yapılan atamanın görünür olmadığını gösterir; çünkü sLocal dize değiştirilmeden önce yeniden atanmıştı.

string msg = "Hi";
RefReassignAndModify(ref msg);
Console.WriteLine(msg); // Output: Hi!

Bileşik atama

İkili işleç op için belirli bir formdaki bileşik atama ifadesi

x op= y

Şu değere eşdeğerdir:

x = x op y

x yalnızca bir kez değerlendirilir olması dışında.

Aritmetik, Boole mantıksal ve bit düzeyinde mantıksal ve shift işleçlerinin tümü bileşik atamayı destekler.

Null birleşim ataması

Sağ işleneninin değerini sol işlenenine atamak için null birleşim atama işlecini ??= yalnızca soldaki işlenen olarak değerlendirilirse nullkullanabilirsiniz. Daha fazla bilgi için ve ?? işleçleri makalesine??= bakın.

İşleç aşırı yüklenebilirliği

Kullanıcı tanımlı bir tür atama işlecini aşırı yükleyemez. Ancak, kullanıcı tanımlı bir tür başka bir türe örtük bir dönüştürme tanımlayabilir. Bu şekilde, kullanıcı tanımlı türün değeri bir değişkene, özelliğe veya başka bir türdeki dizin oluşturucu öğesine atanabilir. Daha fazla bilgi için bkz . Kullanıcı tanımlı dönüştürme işleçleri.

Kullanıcı tanımlı bir tür ikili işleci opaşırı yüklerse, op= varsa işleç de örtük olarak aşırı yüklenir. C# 14'den başlayarak, kullanıcı tanımlı bir tür daha verimli bir uygulama sağlamak için bileşik atama işleçlerini (op=) açıkça aşırı yükleyebilir. Genellikle, bir tür bu işleçleri aşırı yükler çünkü değer, ikili işlemin sonucunu tutmak için yeni bir örnek ayırma yerine yerinde güncelleştirilebilir. Bir tür açık bir aşırı yükleme sağlamazsa, derleyici örtük aşırı yüklemeyi oluşturur.

C# dili belirtimi

Daha fazla bilgi için C# dil belirtimininAtama işleçleri bölümüne ve Kullanıcı tanımlı bileşik atama özelliği belirtimine bakın.

Ayrıca bkz.