Avatar ·

Type Checking en C#: typeof, GetType() o is? ¿Cuándo usar qué?

¡Hola a todos! Soy un desarrollador principiante de C# y no puedo entender la verificación de tipos en C#. Hay tres formas: el operador `typeof`, el método `GetType()` y el operador `is`. Pero, ¿cuándo usar cuál? Aquí hay un ejemplo que me confunde: ```csharp object obj = "Hello, world!"; // Forma 1 if (obj.GetType() == typeof(string)) Console.WriteLine("Esto es un string (GetType)"); // Forma 2 if (obj is string) Console.WriteLine("Esto es un string (is)"); // Forma 3 Type t = typeof(string); if (obj.GetType() == t) Console.WriteLine("Esto es un string (typeof)"); ``` Las tres opciones funcionan, pero siento que no son intercambiables. Por ejemplo, he oído que `typeof` solo funciona con tipos en tiempo de compilación, mientras que `GetType()` lo hace en tiempo de ejecución. Y `is` es algo mágico: parece que verifica y convierte el tipo al mismo tiempo. Por favor, aclárenme: 1. ¿Cuál es la diferencia fundamental entre `typeof`, `GetType()` y `is`? 2. ¿Cuándo usar cada uno para que el código sea correcto?