Tilldelningsoperatorer (C#-referens)
Tilldelningsoperatorn =
tilldelar värdet för sin högra operand till en variabel, en egenskap eller ett indexerarelement som ges av dess vänstra operand. Resultatet av ett tilldelningsuttryck är det värde som tilldelats till den vänstra operanden. Typen av den högra operanden måste vara samma som typen av den vänstra operanden eller implicit konvertibel till den.
Tilldelningsoperatorn =
är rätt-associativ, det vill: ett uttryck för formuläret
a = b = c
utvärderas som
a = (b = c)
I följande exempel visas användningen av tilldelningsoperatorn med en lokal variabel, en egenskap och ett indexerarelement som dess vänstra operand:
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
Den vänstra operanden för en tilldelning tar emot värdet för den högra operanden. När operanderna är av värdetyper kopierar tilldelningen innehållet i den högra operanden. När operanderna är av referenstyper kopierar tilldelningen referensen till objektet.
Detta kallas för värdetilldelning: värdet tilldelas.
referenstilldelning
Referenstilldelningen = ref
gör dess vänstra operand till ett alias till den högra operanden, vilket visas i följande exempel:
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
I föregående exempel initieras den lokala referensvariabeln arrayElement
som ett alias för det första matriselementet. Sedan tilldelas ref
den om för att referera till det sista matriselementet. Eftersom det är ett alias uppdateras även motsvarande matriselement när du uppdaterar dess värde med en vanlig tilldelningsoperator =
.
Den vänstra operanden för ref
tilldelning kan vara en lokal referensvariabel, ett ref
fält och en ref
parameter för , out
eller in
metod. Båda operanderna måste vara av samma typ.
Sammansatt tilldelning
För en binär operator op
, ett sammansatt tilldelningsuttryck för formuläret
x op= y
motsvarar
x = x op y
förutom att x
endast utvärderas en gång.
Sammansatt tilldelning stöds av aritmetiska, booleska logiska och bitvis logiska operatorer och skiftoperatorer.
Null-sammankopplingstilldelning
Du kan använda tilldelningsoperatorn ??=
null-coalescing för att tilldela värdet för dess högra operand till dess vänstra operande endast om den vänstra operand utvärderas till null
. Mer information finns i ?? och ?? = operatorartikel .
Överlagring av operator
En användardefinierad typ kan inte överbelasta tilldelningsoperatorn. En användardefinierad typ kan dock definiera en implicit konvertering till en annan typ. På så sätt kan värdet för en användardefinierad typ tilldelas till en variabel, en egenskap eller ett indexerarelement av en annan typ. Mer information finns i Användardefinierade konverteringsoperatorer.
En användardefinierad typ kan inte uttryckligen överbelasta en sammansatt tilldelningsoperator. Men om en användardefinierad typ överbelastar en binär operator, är operatorn op
, om den op=
finns, också implicit överbelastad.
Språkspecifikation för C#
Mer information finns i avsnittet Tilldelningsoperatorer i C#-språkspecifikationen.