Saltar al contenido

¿Cuál es la diferencia entre tipos explícitos e implícitos?

El paso a paso o código que encontrarás en este post es la solución más fácil y efectiva que hallamos a tu duda o dilema.

Solución:

Esto es un poco complicado porque la sintaxis “cast” en C# en realidad hace un rango de diferente cosas (elenco, conversión primitiva, conversión a medida, etc.)

En un molde implícito, hay una conversión obvia de conservación de referencias entre los dos:

List l = new List();
IList il = l;

El compilador puede probar que esto es seguro solo con static análisis (List siempre es un IList)

Con un lanzamiento explícito, le estás diciendo al compilador que tu sabes mas de lo que hace – “por favor, créame, pero verifique de todos modos”:

List l = new List();
IList il = l;
List l2 = (List)il;

Aunque este elenco es posibleel compilador no lo aceptará todosIListson en realidad List – así que debemos decirle que lo deje pasar.


En una conversión primitiva implícita (proporcionada por la especificación del idioma), generalmente se asume que hay una conversión segura, sin riesgos y sin pérdidas (advertencia: vea el comentario de Jon):

int i = 1;
float f = i;

Con una conversión primitiva explícita, es probable que la conversión pudo perder datos, o no es obvio:

float f = 1;
int i = (int)f;

Con operadores a medida, todas las apuestas están canceladas y tendrías que mirar la documentación. Podría ser un molde de referencia, o podría ser cualquier cosa. Puede seguir reglas similares a las conversiones primitivas (ejemplo: decimal), o podría hacer cualquier cosa al azar:

XNamespace ns = "http://abc/def"; // implicit
XAttribute attrib = GetAttrib();
int i = (int)attrib; // explicit (extracts text from attrib value and
                     // parses to an int)

Ambos ejecutan código personalizado que es específico del contexto.

¿Cuál es la diferencia entre el presidente de los Estados Unidos y el presidente de Canadá?

Como no hay presidente de Canadá, es difícil responder a la pregunta. Lo correcto es retroceder y pedir que se aclare la pregunta. Por “el presidente de Canadá”, ¿el interrogador se refiere a la reina (jefe de estado ceremonial), al gobernador general (que puede vetar proyectos de ley) o al primer ministro (que actúa efectivamente como el ejecutivo), o algo más? Difícil de decir sin aclaración.

E incluso con una aclaración, es una pregunta vaga. ¿Qué diferencias quieres saber?

Dado que no existe un “reparto implícito” en C#, es difícil responder a su pregunta. En C#, la conversión es un operador. Así que lo empujaré hacia atrás.

¿Quería preguntar “¿cuál es la diferencia entre una conversión explícita y una conversión implícita?” ¿O quisiste preguntar sobre la semántica del operador de reparto? ¿O la diferencia entre el operador de conversión y otros operadores de conversión de tipos? ¿O situaciones en las que los operadores de conversión pueden ser insertados “implícitamente” en su código por el compilador? (Por ejemplo, el bucle foreach y el operador += pueden insertar implícitamente una conversión invisible).

¿Puedes aclarar la pregunta? ¿De qué dos cosas está pidiendo una comparación y qué tipo de diferencias le interesan?

Podría considerar leer el capítulo “Conversiones” de la especificación de C#. Es muy probable que cualquier pregunta que tenga sobre las conversiones sea respondida allí.

int i = 2;

float a = i;        // Implicit
float b = (float)i; // Explicit

Sección de Reseñas y Valoraciones

Finalizando este artículo puedes encontrar las interpretaciones de otros creadores, tú incluso eres capaz dejar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *