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á todosIList
son 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.