Delen via


Toewijzingsoperatoren (C#-verwijzing)

De toewijzingsoperator = wijst de waarde van de rechteroperand toe aan een variabele, een eigenschap of een indexeerelement dat is opgegeven door de linkeroperand. Het resultaat van een toewijzingsexpressie is de waarde die is toegewezen aan de linkeroperand. Het type van de rechteroperand moet hetzelfde zijn als het type van de linkeroperand of impliciet converteerbaar naar de operand.

De toewijzingsoperator = is rechts-associatief, dat wil gezegd een expressie van het formulier

a = b = c

Wordt geëvalueerd als

a = (b = c)

In het volgende voorbeeld ziet u het gebruik van de toewijzingsoperator met een lokale variabele, een eigenschap en een indexeerfunctieelement als de linkeroperand:

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

De linkeroperand van een opdracht ontvangt de waarde van de rechteroperand. Wanneer de operanden waardetypen zijn, kopieert de toewijzing de inhoud van de rechteroperand. Wanneer de operanden van referentietypen zijn, kopieert de toewijzing de verwijzing naar het object.

Deze bewerking wordt waardetoewijzinggenoemd: de waarde wordt toegewezen.

verw-toewijzing

Verw-toewijzing= ref maakt de linkeroperand een alias naar de rechteroperand, zoals in het volgende voorbeeld wordt gedemonstreert:

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

In het voorgaande voorbeeld wordt de lokale referentievariabelearrayElement geïnitialiseerd als een alias voor het eerste matrixelement. Vervolgens wordt ref deze opnieuw toegewezen om te verwijzen naar het laatste matrixelement. Omdat het een alias is, wordt het bijbehorende matrixelement ook bijgewerkt wanneer u de waarde bijwerkt met een gewone toewijzingsoperator =.

De linkeroperand van ref de toewijzing kan een lokale referentievariabele, een ref veld en een ref, outof in methodeparameter zijn. Beide operanden moeten van hetzelfde type zijn.

Een ref-toewijzing betekent dat een verwijzingsvariabele een ander referent heeft. Het verwijst niet langer naar de vorige referrent. Als u ref = gebruikt voor een ref parameter, betekent dit dat de parameter niet meer naar het argument verwijst. Acties die de status van het object wijzigen nadat het opnieuw is toegewezen, worden deze wijzigingen aangebracht in het nieuwe item. Denk bijvoorbeeld aan de volgende methode:

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

In het volgende gebruik ziet u dat de toewijzing aan de parameter s niet zichtbaar is na de methodeaanroep, omdat sref opnieuw is toegewezen om te verwijzen naar sLocal voordat de tekenreeks werd gewijzigd:

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

Samengestelde toewijzing

Voor een binaire operator op, een samengestelde toewijzingsexpressie van het formulier

x op= y

Is gelijk aan

x = x op y

Behalve dat x slechts eenmaal wordt geëvalueerd.

De rekenkundige, booleaanse logischeen bitsgewijze logische en shiftoperatoren ondersteunen allemaal samengestelde toewijzing.

Toewijzing null-coalescing

U kunt de toewijzingsoperator ??= null-coalescing gebruiken om de waarde van de rechteroperand alleen toe te wijzen aan de linkeroperand als de linkeroperand resulteert nullin . Zie de ?? en ?? voor meer informatie. = artikel operatoren .

Overbelasting van operatoren

Een door de gebruiker gedefinieerd type kan de toewijzingsoperator niet overbelasten . Een door de gebruiker gedefinieerd type kan echter een impliciete conversie naar een ander type definiëren. Op die manier kan de waarde van een door de gebruiker gedefinieerd type worden toegewezen aan een variabele, een eigenschap of een indexeerfunctieelement van een ander type. Zie Door de gebruiker gedefinieerde conversieoperators voor meer informatie.

Een door de gebruiker gedefinieerd type kan een samengestelde toewijzingsoperator niet expliciet overbelasten. Als een door de gebruiker gedefinieerd type echter een binaire operator opoverbelast, wordt de op= operator, als deze bestaat, ook impliciet overbelast.

C#-taalspecificatie

Zie de sectie Toewijzingsoperatoren van de C#-taalspecificatie voor meer informatie.

Zie ook