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,ref
alan ve ref
, out
veya 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ç op
iç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 null
kullanabilirsiniz. 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 op
aşı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.