Operatory przypisania (odwołanie w C#)

Operator = przypisania przypisuje wartość operandu po prawej stronie do zmiennej, właściwości lub elementu indeksatora podanego przez operand po lewej stronie. Wynikiem wyrażenia przypisania jest wartość przypisana do operandu po lewej stronie. Typ operandu po prawej stronie musi być taki sam jak typ operandu po lewej stronie lub niejawnie konwertowany.

Operator = przypisania jest prawo asocjacyjny, czyli wyrażenie formularza

a = b = c

jest obliczany jako

a = (b = c)

W poniższym przykładzie pokazano użycie operatora przypisania ze zmienną lokalną, właściwością i elementem indeksatora jako operand po lewej stronie:

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

Lewy operand przypisania otrzymuje wartość operandu po prawej stronie. Gdy operandy są typami wartości, przypisanie kopiuje zawartość operandu po prawej stronie. Gdy operandy są typami referencyjnymi, przypisanie kopiuje odwołanie do obiektu.

Jest to nazywane przypisaniem wartości: wartość jest przypisywana.

ref przypisania

Przypisanie= ref ref sprawia, że lewy operand jest aliasem do operandu po prawej stronie, jak pokazano w poniższym przykładzie:

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

W poprzednim przykładzie lokalna zmienna arrayElement referencyjna jest inicjowana jako alias pierwszego elementu tablicy. Następnie zostanie ref ponownie przydzielony, aby odwołać się do ostatniego elementu tablicy. Ponieważ jest to alias, po zaktualizowaniu jej wartości za pomocą zwykłego operatora =przypisania, odpowiedni element tablicy jest również aktualizowany.

Lewy operand ref przypisania może być lokalną zmienną referencyjną, polemref i parametrem refmetody , outlub in . Oba operandy muszą być tego samego typu.

Przypisanie złożone

Dla operatora opbinarnego wyrażenie przypisania złożonego formularza

x op= y

jest równoważny

x = x op y

z wyjątkiem tego, że x jest obliczany tylko raz.

Przypisanie złożone jest obsługiwane przez operatory arytmetyczne, logiczne i bitowe logiczne i przesunięcia.

Przypisanie łączenia wartości null

Możesz użyć operatora ??= przypisania łączenia wartości null, aby przypisać wartość operandu po prawej stronie do operandu po lewej stronie tylko wtedy, gdy operand po lewej stronie zwróci wartość .null Aby uzyskać więcej informacji, zobacz ?? i ?? = artykuł operatorów .

Przeciążenie operatora

Typ zdefiniowany przez użytkownika nie może przeciążyć operatora przypisania. Jednak typ zdefiniowany przez użytkownika może definiować niejawną konwersję na inny typ. W ten sposób wartość typu zdefiniowanego przez użytkownika może być przypisana do zmiennej, właściwości lub elementu indeksatora innego typu. Aby uzyskać więcej informacji, zobacz Operatory konwersji zdefiniowane przez użytkownika.

Typ zdefiniowany przez użytkownika nie może jawnie przeciążyć operatora przypisania złożonego. Jeśli jednak typ zdefiniowany przez użytkownika przeciąża operator opbinarny , op= operator, jeśli istnieje, jest również niejawnie przeciążony.

specyfikacja języka C#

Aby uzyskać więcej informacji, zobacz sekcję Operatory przypisania specyfikacji języka C#.

Zobacz też