Aracılığıyla paylaş


Atama işleçleri (C# başvurusu)

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

Atama işleci = doğru ilişkilendirilir, yani formun ifadesidir

a = b = c

Şu şekilde değerlendirilir:

a = (b = c)

Aşağıdaki örnek, atama işlecinin yerel değişken, özellik ve dizin oluşturucu öğesiyle sol tarafında işlenen 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

Atamanın sol işleneni sağ işlenenin değerini alır. İşlenenler değer türlerinde olduğunda, atama sağ işlenenin içeriğini kopyalar. İşlenenler başvuru türünde olduğunda, atama başvuruyu nesneye kopyalar.

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

başvuru ataması

Başvuru ataması= ref, aşağıdaki örnekte gösterildiği gibi sol tarafındaki işleneni sağ işlenene bir diğer 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 öğesine başvurmak için yeniden atanır. Diğer ad olduğundan, değerini sıradan bir atama işleciyle =güncelleştirdiğinizde, buna karşılık gelen dizi öğesi de güncelleştirilir.

Atamanın sol işleneni ref yerel başvuru değişkeni,refalan ve ref, outveya in yöntem parametresi olabilir. her iki işlenen de 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, s dize değiştirilmeden önce sLocal başvurmak üzere yeniden atan ref dığından s parametresine atamanın yöntem çağrısından sonra görünür olmadığını gösterir:

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

Bileşik atama

İkili işleç opiçin formun 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ıksalve bit düzeyinde mantıksal ve kaydırma 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 bkz. ?? ve ?? = işleçler makalesi.

İş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, bileşik atama işlecini açıkça aşırı yükleyemez. Ancak, kullanıcı tanımlı bir tür bir ikili işleci opaşırı yüklerse, op= varsa işleci de örtük olarak aşırı yüklenir.

C# dili belirtimi

Daha fazla bilgi için C# dil belirtiminin Atama işleçleri bölümüne bakın.

Ayrıca bkz.