Typecasting en C #

¿Qué es el moldeado de tipos, de qué sirve esto? ¿Como funciona?

Proporcione un tutorial de muestra, no pude encontrar ninguno bueno buscando en Google.

Casting suele ser una cuestión de decirle al comstackdor que, aunque solo sabe que un valor es de algún tipo general, usted sabe que en realidad es de un tipo más específico. Por ejemplo:

object x = "hello"; ... // I know that x really refers to a string string y = (string) x; 

Hay varios operadores de conversión. El (typename) expression puede hacer tres cosas diferentes:

  • Una conversión de unboxing (por ejemplo, de un entero encuadrado a int )
  • Una conversión definida por el usuario (por ejemplo, fundir XAttribute en la string )
  • Una conversión de referencia dentro de una jerarquía de tipos (p. Ej., Fundir el object en la string )

Todos estos pueden fallar en el momento de la ejecución, en cuyo caso se lanzará una excepción.

El operador as , por otro lado, nunca arroja una excepción; en cambio, el resultado de la conversión es null si falla:

 object x = new object(); string y = x as string; // Now y is null because x isn't a string 

Se puede usar para desempaquetar a un tipo de valor que admite valores de nulo:

 object x = 10; // Boxed int float? y = x as float?; // Now y has a null value because x isn't a boxed float 

También hay conversiones implícitas, por ejemplo, de int a long :

 int x = 10; long y = x; // Implicit conversion 

¿Eso cubre todo lo que te interesaba?

Casting significa crear una referencia a un objeto que es de un tipo diferente a la referencia que está manteniendo actualmente. Puede hacer upcasting o downcasting y cada uno tiene diferentes beneficios.

Upcasting:

 string greeting = "Hi Bob"; object o = greeting; 

Esto crea una referencia más general (objeto) a partir de la referencia más específica (cadena). Tal vez hayas escrito un código que puede manejar cualquier objeto, como este:

 Console.WriteLine("Type of o is " + o.GetType()); 

No es necesario cambiar el código, independientemente de los objetos que establezca.

Downcasting:

 object o = "Hi Bob"; string greeting = (string)o; 

Aquí quieres una referencia más específica. Es posible que sepa que el objeto es una cadena (puede probar esto, por ejemplo:

 if (o is string) { do something } 

Ahora puede tratar la referencia como una cadena en lugar de un objeto. Por ejemplo, una cuerda tiene una longitud (pero un objeto no), por lo que puede decir:

 Console.WriteLine("Length of string is " + greeting.length); 

Que no puedes hacer con un objeto.

Mira esto o esto :

Debido a que C # se tipifica de forma estática en el momento de la comstackción, después de que se declara una variable, no se puede declarar de nuevo ni se puede usar para almacenar valores de otro tipo a menos que ese tipo sea convertible al tipo de la variable

Sin embargo, a veces puede ser necesario copiar un valor en una variable o un parámetro de método de otro tipo. Por ejemplo, puede tener una variable entera que debe pasar a un método cuyo parámetro se escribe como doble. O puede necesitar asignar una variable de clase a una variable de un tipo de interfaz. Este tipo de operaciones se llaman conversiones de tipo. En C #, puede realizar los siguientes tipos de conversiones

Casting de un tipo de datos a otro.

Para una lectura general, vea esto .

Ver también msdn

Además, si está emitiendo explícitamente, puede aprovechar la coincidencia de patrones. Si tienes un objeto:

 object aObject = "My string value"; 

Puede convertir el objeto de forma segura en una sola línea:

 if (aObject is string aString) { Console.WriteLine("aString = " + aString) // Output: "aString = My string value" } 

Al usar esto, junto con una instrucción if invertida, puede lanzar tipos de forma segura y fallar anticipadamente si es necesario:

 public void Conversion(object objA, object objB) { // Fail out early if the objects provided are not the correct type, or are null if (!(objA is string str) || !(objB is int num)) { return; } // Now, you have `str` and `num` that are safely cast, non-null variables // all while maintaining the same scope as your Conversion method Console.WriteLine("str.Length is " + str.Length); Console.WriteLine("num is " + num); }