Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 na něj musí být implicitně převeden.
Operátor =
přiřazení je pravě-asociativní, to je výraz ve tvaru.
a = b = c
Je hodnoceno jako
a = (b = c)
Následující příklad ukazuje použití operátoru přiřazení, kdy místní proměnná, vlastnost a prvek indexeru slouží jako 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 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.
Od jazyka C# 14 může levá strana přiřazení hodnoty obsahovat výraz podmíněného člena s hodnotou null, například ?.
nebo ?[]
. Pokud je levá strana null, nevyhodnocuje se výraz na pravé straně.
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é Booleovy a bitové logické a posuvné operátory podporují složené 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 článku o operátorech ??
a ??=
.
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.
Pokud uživatelem definovaný typ přetěžuje binární operátor op
, op=
operátor, pokud existuje, je také implicitně přetížen. Počínaje jazykem C# 14 může uživatelem definovaný typ explicitně přetížit operátory složeného přiřazení (op=
), aby poskytoval efektivnější implementaci. Typ obvykle přetěžuje tyto operátory, protože hodnotu lze aktualizovat místo přidělení nové instance pro uložení výsledku binární operace. Pokud typ neposkytuje explicitní přetížení, kompilátor vygeneruje implicitní přetížení.
specifikace jazyka C#
Další informace najdete v části Operátory přiřazeníspecifikace jazyka C# a specifikace funkce definované uživatelem definovaného složeného přiřazení .