He usado el tipo dinámico y el tipo de objeto indistintamente. ¿Hay alguna diferencia entre estos dos tipos? ¿Hay alguna implicancia de rendimiento de usar uno sobre el otro? ¿Cuál de estos es más flexible?dinámico en comparación con el tipo de objeto
Respuesta
Son enormemente diferente.
Si usa dynamic
, opta por el tipado dinámico y, por lo tanto, opta por la verificación en tiempo de compilación en su mayor parte. Y sí, es menos eficiente que usar el tipado estático donde puede usar tipado estático.
Sin embargo, no se puede hacer mucho con el tipo object
de todos modos, apenas tiene miembros. ¿Dónde te encuentras usándolo? Cuando desee escribir un código de propósito general que pueda funcionar con una variedad de tipos, generalmente debería considerar los genéricos en lugar de object
.
Con el avance en el lenguaje C# hemos ver que incluso var tipo es comparable a dinámica y objeto tipos. Aquí son los 3 tipos como he aprendido mediante la comparación de estos 7 puntos:
objeto
- objeto se introdujo con C# 1.0.
- Puede almacenar cualquier tipo de valor, porque object es la clase base de todo tipo en .NET framework.
- El compilador tiene poca información sobre el tipo.
- El tipo de objeto se puede pasar como argumento de método y el método también puede devolver el tipo de objeto.
- Necesita convertir el objeto variable al tipo original para usarlo y realizar las operaciones deseadas.
- Causa el problema en el tiempo de ejecución si el valor almacenado no se convierte al tipo de datos subyacente.
- Útil cuando no tenemos más información sobre el tipo de datos.
Var
- Var se introdujo con C# 3.0
- Es capaz de almacenar cualquier tipo de valor, pero es obligatoria para inicializar tipos var en el momento de la declaración.
- Es tipo seguro, es decir, el compilador tiene toda la información sobre el valor almacenado, por lo que no causa ningún problema en tiempo de ejecución.
- El tipo Var no se puede pasar como argumento de método y el método no puede devolver el tipo de objeto. Var escribe el trabajo en el ámbito donde está definido.
- No es necesario realizar el colado porque el compilador tiene toda la información para realizar operaciones.
- No causa problemas porque el compilador tiene toda la información sobre el valor almacenado.
- Útil cuando no conocemos el tipo real, es decir, el tipo es anónimo.
dinámico
- dinámico se introdujo con C# 4.0
- Se puede almacenar cualquier tipo de variable, similar a la variable de idioma VB edad.
- No es un tipo seguro, es decir, el compilador no tiene ninguna información sobre el tipo de variable.
- El tipo dinámico se puede pasar como método y el método también puede devolver el tipo dinámico.
- No es necesario el colado, pero debe conocer las propiedades y los métodos relacionados con el tipo almacenado.
- Causa un problema si se accede a las propiedades o métodos incorrectos porque toda la información sobre el valor almacenado es obtener resolución solo en tiempo de ejecución.
- Útil cuando necesitamos codificar usando reflexión o lenguajes dinámicos o con los objetos COM, porque necesita escribir menos código.
Espero que esto ayude a alguien.
Gracias!
Tengo entendido que var no es un tipo en absoluto; simplemente decide implícitamente el tipo en función del valor inicializado. Por ejemplo: var x = 2; x NO es un tipo var, es un tipo int. – Nanomurf
En lenguaje sencillo:
Supongamos web tienen el siguiente método:
public static void ConsoleWrite(string inputArg)
{
Console.WriteLine(inputArg);
}
objeto: el siguiente código tiene compilar errores a no ser objeto colado a cadena:
public static void Main(string[] args)
{
object obj = "String Sample";
ConsoleWrite(obj);// compile error
ConsoleWrite((string)obj);
Console.ReadKey();
}
dinámica : el siguiente código se compila correctamente pero si contiene un valor excepto string
arroja Runtime err o
public static void Main(string[] args)
{
dynamic dyn = "String Sample";
ConsoleWrite(dyn);
dyn = 1;
ConsoleWrite(dyn);// Runtime Error
Console.ReadKey();
}
- 1. ¿Qué es el tipo dinámico de objeto?
- 2. Cómo crear una lista con un tipo de objeto dinámico
- 3. C# Comparación del tipo de objeto
- 4. Cómo desempacar un objeto de C# para el tipo dinámico
- 5. Dinámico Linq - Realiza una consulta sobre un objeto con miembros del tipo "dinámico"
- 6. objeto de copia en comparación con el clon en PHP
- 7. ¿Cómo invocar el método estático en C# 4.0 con el tipo dinámico?
- 8. GC.SuppressFinalize el rendimiento en comparación con el objeto no finalizable
- 9. Comparación de objeto elegante
- 10. ¿Cómo crear un tipo dinámico propio o un objeto dinámico en C#?
- 11. MVC QueryString en el objeto dinámico
- 12. C#, tipo de retorno dinámico
- 13. Obtener el tipo genérico de llamada al método en el objeto dinámico
- 14. Diferencia entre el objeto dinámico y System.Object
- 15. XML Serializar objeto dinámico
- 16. ¿Cómo usarás el tipo dinámico C# 4?
- 17. conversiones de tipo dinámico C#
- 18. ¿Qué hace el nuevo tipo dinámico scala?
- 19. En C# /. ¿Hace que un tipo dinámico ocupe menos espacio que el objeto?
- 20. LINQ Cualquier) argumento (en comparación con el tipo de datos de parámetros emite
- 21. Limitaciones del tipo dinámico en C#
- 22. EL comparación con igualIgnoreCase
- 23. sobre reparto dinámico el C++ con clase de plantilla
- 24. PropertyInfo.GetValue() "El objeto no coincide con el tipo de destino".
- 25. Disparador WPF basado en el tipo de objeto
- 26. Encuadernación de tipo estático Vs Encuadernación de tipo dinámico
- 27. obtener el tipo de un objeto declarado dinámica
- 28. ¿Literal del objeto dinámico en javascript?
- 29. Proxy dinámico sin especificar explícitamente el tipo en scala
- 30. Agregar miembros a un objeto dinámico en tiempo de ejecución
Si Luke acaba de llamar al puñado de métodos disponibles en 'System.Object', ¿también se llamarían dinámicamente? –
@Steven: Sí, lo hace, ¡incluso para 'GetType' que no es virtual! (Puede configurar un delegado para que reaccione a las llamadas de 'GetType' en' ExpandoObject', por ejemplo. Cosas de miedo.) –
Eso es lo que temía. Parece que tendríamos que "encajonar" una 'dinámica' mediante upcasting en 'objeto' si queremos saber la verdad sobre su tipo. :-) –