Reference, imutabilni typy a boxing

Reference Typy

V C# referenční typy, jako jsou třídy a pole, uchovávají odkazy na objekty uložené na haldě. Když dvě proměnné odkazují na stejný objekt, změny provedené prostřednictvím jedné proměnné ovlivní druhou, protože obě ukazují na stejný objekt v paměti.

Příklad:

Osoba osoba1 = new Osoba();
Osoba osoba2 = osoba1; // oba odkazy ukazují na stejný objekt
osoba2.Jmeno = "Tomáš";
Console.WriteLine(osoba1.Jmeno); // Výstup: Tomáš

V tomto příkladu, když změníme Jmeno prostřednictvím osoba2, změní se i hodnota v osoba1, protože obě proměnné odkazují na stejný objekt.

Imutabilní Typy

Imutabilní typy jsou ty, které nelze po vytvoření změnit. Nejznámějším imutabilním typem v C# je string. Když změníte hodnotu stringu, ve skutečnosti se vytvoří nový objekt a starý zůstává nezměněn.

Příklad:

string text = "Ahoj";
string novyText = text.ToUpper(); // vytváří nový string "AHOJ"
Console.WriteLine(text); // Výstup: Ahoj

Zde volání metody ToUpper nevytvoří změnu původního text, ale místo toho vrátí nový string.

Boxing a Unboxing

Boxing je proces převodu hodnotového typu (např. int) na referenční typ (object), což znamená, že se hodnotový typ zabalí do objektu, aby mohl být uložen na haldě. Unboxing je proces opačný, kde se zabalí objekt opět rozbalí zpět do hodnotového typu.

Příklad:

int cislo = 42;
object box = cislo; // Boxing: zabalení hodnotového typu do objektu
int unbox = (int)box; // Unboxing: rozbalení zpět na hodnotový typ

Boxing a unboxing může mít vliv na výkon aplikace, protože přechod mezi zásobníkem (stack) a haldou (heap) může být časově náročný.

Shrnutí:

Pokud chcete pokračovat s dalším tématem, dejte vědět!