Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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 daar impliciet in converteerbaar zijn.
De toewijzingsoperator =
is rechts-associatief, dat wil zeggen, een expressie van de vorm
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 toewijzingsoperatie 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.
Vanaf C# 14 kan de linkerkant van een waardetoewijzing een null-expressie voor voorwaardelijk lid bevatten, zoals ?.
of ?[]
. Als de linkerkant null is, wordt de expressie aan de rechterkant niet geëvalueerd.
referentie toewijzing
Verwijzingstoewijzing= ref
maakt de linkeroperand een alias naar de rechteroperand, zoals in het volgende voorbeeld wordt gedemonstreerd.
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
, out
of 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 toestand van het object wijzigen na hertoewijzing van de referentie, zorgen ervoor dat deze wijzigingen in het nieuwe item worden doorgevoerd. 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 s
ref
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 logische en bitsgewijze logische operatoren en shiftoperators ondersteunen samengestelde toewijzing.
Null-samenvoegende toewijzing
U kunt de null-coalescing toewijzingsoperator ??=
gebruiken om de waarde van de rechteroperand aan de linkeroperand toe te wijzen, maar alleen als de linkeroperand null
is. Raadpleeg voor meer informatie het artikel over de operators ??
en ??=
.
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.
Als een door de gebruiker gedefinieerd type een binaire operator op
overbelast, wordt de op=
operator, indien aanwezig, ook impliciet overbelast. Vanaf C# 14 kan een door de gebruiker gedefinieerd type expliciet de operators voor samengestelde toewijzingen (op=
) overbelasten om een efficiëntere implementatie te bieden. Meestal worden deze operators door een type overbelast omdat de waarde ter plekke kan worden aangepast, in plaats van een nieuw object toe te wijzen om het resultaat van de binaire bewerking op te slaan. Als een type geen expliciete overbelasting biedt, genereert de compiler de impliciete overbelasting.
C#-taalspecificatie
Zie de sectie Toewijzingsoperatoren van de C#-taalspecificatie en de door de gebruiker gedefinieerde specificatie voor samengestelde toewijzingsfuncties voor meer informatie.