Jakie są rodzaje konwersji typów w C#?
sobes.tech AI
Odpowiedź od AI
W języku C# istnieją dwa główne rodzaje rzutowania typów:
-
Jawne rzutowanie (Explicit conversion): Wymaga użycia operatora
(typ). Używa się go, gdy kompilator nie może bezpiecznie wykonać konwersji automatycznie, na przykład przy rzutowaniu z klasy bazowej na pochodną lub z typu o większej precyzji na typ o mniejszej (np.doublenaint). Może to prowadzić do utraty danych lub błędów w czasie działania (InvalidCastException).// Jawne rzutowanie z double na int double d = 123.45; int i = (int)d; // i będzie równe 123 // Rzutowanie obiektu na konkretny typ object obj = "Hello"; string s = (string)obj; // s będzie "Hello" -
Niejawne rzutowanie (Implicit conversion): Wykonywane automatycznie przez kompilator, gdy konwersja jest znana i bezpieczna, czyli bez utraty danych. Na przykład rzutowanie z
intnadouble.// Niejawne rzutowanie z int na double int x = 10; double y = x; // y będzie 10.0 // Niejawne rzutowanie klasy pochodnej na bazową class Base {} class Derived : Base {} Derived derivedObj = new Derived(); Base baseObj = derivedObj; // Niejawne rzutowanie
Ponadto istnieją operatory as i is, które również odnoszą się do konwersji typów, ale z pewnymi cechami:
-
Operator
as: Wykonuje rzutowanie typu, jeśli jest to możliwe, i zwracanull, jeśli nie powiodło się. Nie generuje wyjątku InvalidCastException. Używany tylko z typami referencyjnymi i Nullable.// Użycie operatora as object obj2 = "World"; string s2 = obj2 as string; // s2 będzie "World" object obj3 = 123; string s3 = obj3 as string; // s3 będzie null -
Operator
is: Sprawdza, czy obiekt jest instancją określonego typu lub typu pochodnego. Zwracatruelubfalse. W najnowszych wersjach C# można go używać z pattern matching, aby jednocześnie sprawdzić i przekonwertować.// Użycie operatora is do sprawdzenia typu object obj4 = "Example"; if (obj4 is string) { // Działania, jeśli obiekt jest stringiem } // Użycie is z pattern matching if (obj4 is string str) { // str jest dostępne tutaj jako string }