Aké typy konverzií existujú v C#?
sobes.tech AI
Odpoveď od AI
V jazyku C# existujú dva hlavné typy prevodu:
-
Explicitný prevod (Explicit conversion): Vyžaduje použitie operátora
(typ). Používa sa, keď kompilátor nemôže bezpečne vykonať konverziu automaticky, napríklad pri prevode z základnej triedy na odvodenú alebo z typu s väčšou presnosťou na typ s menšou (napríkladdoublenaint). Môže viesť ku strate dát alebo chybe počas behu (InvalidCastException).// Explicitný prevod double na int double d = 123.45; int i = (int)d; // i bude 123 // Explicitný prevod objektu na konkrétny typ object obj = "Hello"; string s = (string)obj; // s bude "Hello" -
Implicitný prevod (Implicit conversion): Automaticky sa vykonáva kompilátorom, keď je prevod známy a bezpečný, teda bez straty dát. Napríklad prevod z
intnadouble.// Implicitný prevod int na double int x = 10; double y = x; // y bude 10.0 // Implicitný prevod odvodeného triedy na základnú class Base {} class Derived : Base {} Derived derivedObj = new Derived(); Base baseObj = derivedObj; // Implicitný prevod
Okrem toho existujú operátory as a is, ktoré tiež patria k prevodu typov, ale s vlastnými špecifikami:
-
Operátor
as: Vykonáva prevod typu, ak je to možné, a vracianull, ak sa prevod nepodarí. Nevyvoláva výnimku InvalidCastException. Používa sa iba pre referenčné typy a typy umožňujúce Nullable.// Použitie operátora as object obj2 = "World"; string s2 = obj2 as string; // s2 bude "World" object obj3 = 123; string s3 = obj3 as string; // s3 bude null -
Operátor
is: Kontroluje, či je objekt inštanciou určitého typu alebo jeho odvodeného typu. Vrátitruealebofalse. V najnovších verziách C# sa môže použiť s pattern matching na súčasnú kontrolu a prevod.// Použitie operátora is na kontrolu typu object obj4 = "Example"; if (obj4 is string) { // Akcie, ak je objekt reťazec } // Použitie is s patternom (pattern matching) if (obj4 is string str) { // str je dostupný ako reťazec }