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 ref
metody , out
lub in
. Oba operandy muszą być tego samego typu.
Przypisanie złożone
Dla operatora op
binarnego 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 op
binarny , 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#.