tipo de objeto dynamic vs.

He usado el tipo dynamic 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?

Ellos son muy diferentes.

Si usa la dynamic , opta por la escritura dinámica y, por lo tanto, opta por la verificación en tiempo de comstackción en su mayor parte. Y sí, es menos eficiente que el uso de tipeo estático donde puedes usar tipeo estático.

Sin embargo, no se puede hacer mucho con el tipo de object 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 debe considerar los generics en lugar de los object .

Con el avance en el lenguaje C #, hemos visto que incluso el tipo var es comparable a los tipos dynamics y de objeto . Estos son los 3 tipos que aprendí al comparar estos 7 puntos:

Objeto

  1. El objeto se introdujo con C # 1.0.
  2. Puede almacenar cualquier tipo de valor, porque object es la clase base de todo tipo en .NET framework.
  3. El comstackdor tiene poca información sobre el tipo.
  4. El tipo de objeto se puede pasar como argumento de método y el método también puede devolver el tipo de objeto.
  5. Es necesario enviar la variable de objeto al tipo original para usarla y realizar las operaciones deseadas.
  6. Causa el problema en tiempo de ejecución si el valor almacenado no se convierte al tipo de datos subyacente.
  7. Útil cuando no tenemos más información sobre el tipo de datos.

Var

  1. Var fue presentado con C # 3.0
  2. Puede almacenar cualquier tipo de valor, pero es obligatorio inicializar los tipos var en el momento de la statement.
  3. Es tipo seguro, es decir, el comstackdor tiene toda la información sobre el valor almacenado, por lo que no causa ningún problema en tiempo de ejecución.
  4. 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.
  5. No es necesario realizar el colado porque el comstackdor tiene toda la información para realizar operaciones.
  6. No causa problemas porque el comstackdor tiene toda la información sobre el valor almacenado.
  7. Útil cuando no conocemos el tipo real, es decir, el tipo es anónimo.

Dinámica

  1. Dynamic se introdujo con C # 4.0
  2. Puede almacenar cualquier tipo de variable, similar a la antigua variable de lenguaje VB.
  3. No es de tipo seguro, es decir, el comstackdor no tiene información sobre el tipo de variable.
  4. El tipo dynamic se puede pasar como argumento de método y el método también puede devolver el tipo dynamic.
  5. No se requiere el lanzamiento, pero debe conocer las propiedades y los métodos relacionados con el tipo almacenado.
  6. Causa un problema si se accede a las propiedades o métodos incorrectos porque toda la información sobre el valor almacenado se resuelve solo en tiempo de ejecución.
  7. Útil cuando necesitamos codificar usando reflexión o lenguajes dynamics o con los objetos COM, porque necesita escribir menos código.

Espero que esto ayude a alguien.

¡Gracias!

En un lenguaje simple:
Supongamos que tenemos el siguiente método:

 public static void ConsoleWrite(string inputArg) { Console.WriteLine(inputArg); } 

Objeto : el siguiente código tiene un error de comstackción a menos que se emita el objeto a la cadena:

 public static void Main(string[] args) { object obj = "String Sample"; ConsoleWrite(obj);// compile error ConsoleWrite((string)obj); // correct Console.ReadKey(); } 

dynamic : el siguiente código se comstack correctamente pero si contiene un valor, excepto la string , arroja un error de tiempo de ejecución

 public static void Main(string[] args) { dynamic dyn = "String Sample"; ConsoleWrite(dyn); // correct dyn = 1; ConsoleWrite(dyn);// Runtime Error Console.ReadKey(); }