Megosztás:


Hozzárendelési operátorok (C#-referencia)

A hozzárendelési operátor = hozzárendeli a jobb oldali operandus értékét egy változóhoz, egy tulajdonsághoz vagy egy indexelő elemhez, amelyet a bal oldali operandus adott. A hozzárendelési kifejezés eredménye a bal oldali operandushoz rendelt érték. A jobb oldali operandus típusának meg kell egyeznie a bal oldali operandus típusával, vagy implicit módon átalakíthatónak kell lennie hozzá.

A C# nyelv referenciadokumentuma a C# nyelv legújabb kiadású verzióját ismerteti. Emellett a közelgő nyelvi kiadás nyilvános előzetes verziójú funkcióinak kezdeti dokumentációját is tartalmazza.

A dokumentáció azonosítja azokat a funkciókat, amelyeket először a nyelv utolsó három verziójában vagy az aktuális nyilvános előzetes verziókban vezetnek be.

Jótanács

Ha meg szeretné tudni, hogy mikor jelent meg először egy funkció a C#-ban, tekintse meg a C# nyelvi verzióelőzményeiről szóló cikket.

A hozzárendelési operátor = jobb asszociatív, ami az űrlap kifejezését jelenti

a = b = c

A kiértékelés a következőképpen történik:

a = (b = c)

Az alábbi példa a hozzárendelési operátor használatát mutatja be egy helyi változóval, egy tulajdonsággal és egy indexelő elemet tartalmazó bal oldali operandussal:

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

A feladat bal oldali operandusa megkapja a jobb oldali operandus értékét . Ha az operandusok értéktípusokból állnak, a hozzárendelés átmásolja a jobb oldali operandus tartalmát. Ha az operandusok referenciatípusok, a hozzárendelés átmásolja az objektumra mutató hivatkozást.

Ezt a műveletet érték-hozzárendelésnek nevezzük: az érték hozzárendelése.

A C# 14-től kezdődően az érték-hozzárendelés bal oldala tartalmazhat null feltételes tagkifejezést, például ?. vagy ?[]. Ha a bal oldali érték null, a jobb oldali kifejezés nem lesz kiértékelve.

ref hozzárendelés

A Ref-hozzárendelés= ref a bal oldali operandusát a jobb oldali operandus aliasává teszi, ahogy az alábbi példa is mutatja:

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

Az előző példában a helyi referenciaváltozóarrayElement az első tömbelem aliasaként van inicializálva. Ezután ref hozzá van rendelve, hogy az utolsó tömbelemre hivatkozzon. Aliasként, amikor az értékét egy szokásos hozzárendelési operátorral =frissíti, a megfelelő tömbelem is frissül.

A hozzárendelés bal oldali operandusa ref lehet helyi referenciaváltozó,refmező és ref, outvagy in metódusparaméter. Mindkét operandusnak azonos típusúnak kell lennie.

A ref hozzárendelés azt jelenti, hogy egy referenciaváltozó más hivatkozással rendelkezik. Már nem a korábbi hivatkozására hivatkozik. Ha ref =-et használ egy ref paraméteren, az azt jelenti, hogy a paraméter már nem hivatkozik az argumentumára. Minden olyan művelet, amely módosítja az objektum állapotát az újbóli hozzárendelés után, végrehajtja ezeket a módosításokat az új elemen. Vegyük például a következő módszert:

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

Az alábbi használat azt mutatja, hogy a paraméter s-hoz történő hozzárendelés nem látható a metódushívás után, mert sref újra hozzárendelve lett, hogy sLocal-ra hivatkozzon, mielőtt a sztringet módosították.

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

Összetett hozzárendelés

Bináris operátor opesetén az űrlap összetett hozzárendelési kifejezése

x op= y

Egyenértékű azzal, hogy

x = x op y

Kivéve, hogy a x csak egyszer lesz kiértékelve.

Az aritmetikai, Boolean logikai és bitenkénti logikai és shift operátorok mind támogatják az összetett hozzárendelést.

Null-egyesítő hozzárendelés

A null-szenesítés-hozzárendelési operátorral ??= csak akkor rendelje hozzá a jobb oldali operandus értékét a bal oldali operandushoz, ha a bal oldali operandus kiértékeli azt null. További információkért tekintse meg az ?? operátorokról szóló ??= cikket.

Operátorok túlterhelése

A felhasználó által definiált típus nem terhelheti túl a hozzárendelési operátort. A felhasználó által definiált típus azonban definiálhat implicit átalakítást egy másik típusra. Ezzel az átalakítással hozzárendelheti egy felhasználó által definiált típus értékét egy másik típusú változóhoz, tulajdonsághoz vagy indexelő elemhez. További információ: Felhasználó által definiált konverziós operátorok.

Ha egy felhasználó által definiált típus túlterhel egy bináris operátort op, akkor az op= operátor is implicit módon túlterhelődik. A C# 14-től kezdve a felhasználó által definiált típus explicit módon túlterhelheti az összetett hozzárendelési operátorokat (op=) a hatékonyabb végrehajtás érdekében. Egy típus általában túlterheli ezeket az operátorokat, mert az érték frissíthető a helyén, ahelyett, hogy egy új példányt helyeznek ki a bináris művelet eredményének tárolására. Ha egy típus nem biztosít explicit túlterhelést, a fordító implicit túlterhelést hoz létre.

C# nyelvspecifikáció

További információ: A C# nyelv specifikációjánakHozzárendelési operátorok szakasza és a felhasználó által definiált összetett hozzárendelési funkció specifikációja.

Lásd még