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 referensvariabelnarrayElement 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 refparameter för , outeller 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.

Se även