Operátory přiřazení (referenční dokumentace jazyka C#)
Operátor =
přiřazení přiřadí hodnotu jeho pravého operandu proměnné, vlastnosti nebo prvku indexeru zadaného jeho levým operandem. Výsledkem výrazu přiřazení je hodnota přiřazená k levému operandu. Typ pravého operandu musí být stejný jako typ levého operandu nebo implicitně převést na něj.
Operátor =
přiřazení je asociativní, tedy výraz formuláře.
a = b = c
Je hodnoceno jako
a = (b = c)
Následující příklad ukazuje použití operátoru přiřazení s místní proměnnou, vlastností a indexer element jako jeho levý 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
Levý operand přiřazení obdrží hodnotu operandu pravého operandu. Pokud jsou operandy hodnotových typů, přiřazení zkopíruje obsah pravého operandu. Pokud jsou operandy typu odkazu, přiřazení zkopíruje odkaz na objekt.
Tato operace se nazývá přiřazení hodnoty: tato hodnota je přiřazena.
přiřazení odkazu
Přiřazení= ref
odkazu vytvoří z levého operandu alias pravého operandu, jak ukazuje následující příklad:
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
V předchozím příkladu je místní referenční proměnnáarrayElement
inicializována jako alias prvního prvku pole. Potom se ref
znovu přiřazuje, aby odkazoval na poslední prvek pole. Protože se jedná o alias, při aktualizaci jeho hodnoty pomocí běžného operátoru =
přiřazení je také aktualizován odpovídající prvek pole.
Levým operandem ref
přiřazení může být místní referenční proměnná,ref
pole a ref
parametr metody , out
nebo in
metoda. Oba operandy musí být stejného typu.
Přiřazení ref
znamená, že referenční proměnná má jinou referenční hodnotu. Již neodkazuje na svůj předchozí referent. Použití ref =
u parametru ref
znamená, že parametr už nebude odkazovat na jeho argument. Všechny akce, které upravují stav objektu po opakovaném přiřazení reference, provádějí tyto změny novému objektu. Představte si například následující metodu:
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
Následující použití ukazuje, že přiřazení k parametru s
není viditelné po volání metody, protože s
bylo ref
znovu přiřazeno, aby odkazovalo na sLocal
před úpravou řetězce:
string msg = "Hi";
RefReassignAndModify(ref msg);
Console.WriteLine(msg); // Output: Hi!
Složené přiřazení
U binárního operátoru op
je složený výraz přiřazení formuláře.
x op= y
Je ekvivalentní
x = x op y
Kromě toho, že x
se vyhodnotí jenom jednou.
aritmetické, logické, a bitové logické a posunové operátory všechny podporují kompozitní přiřazení.
Přiřazení při souhlásání s hodnotou null
Operátor přiřazení s hodnotou null-coalescing můžete ??=
použít k přiřazení hodnoty jeho pravého operandu k jeho levému operandu pouze v případě, že se operand vlevo vyhodnotí jako null
. Další informace najdete v tématech ?? a ?? = operátory článku.
Přetížení operátoru
Uživatelem definovaný typ nemůže přetížit operátor přiřazení. Uživatelem definovaný typ však může definovat implicitní převod na jiný typ. Tímto způsobem lze hodnotu uživatelem definovaného typu přiřadit proměnné, vlastnosti nebo prvku indexeru jiného typu. Další informace naleznete v tématu Uživatelem definované operátory převodu.
Uživatelem definovaný typ nemůže explicitně přetížit operátor složeného přiřazení. Nicméně, pokud uživatelem definovaný typ přetíží binární operátor op
, op=
operátor, pokud existuje, je také implicitně přetížen.
specifikace jazyka C#
Další informace najdete v části Operátory přiřazení specifikace jazyka C#.