Diferencia entre var y dinámico en C#

Variables locales tipificadas implícitamente: var son aquellas variables que se declaran sin especificar el tipo .NET explícitamente. En la variable tipificada implícitamente, el compilador deduce automáticamente el tipo de la variable en el momento de la compilación a partir del valor utilizado para inicializar la variable. El concepto de variable implícitamente tipada se introduce en C# 3.0 . La variable escrita implícitamente no está diseñada para reemplazar la declaración de variable normal, está diseñada para manejar alguna situación de caso especial como LINQ (consulta integrada en el lenguaje).

Ejemplo:

// C# program to illustrate the concept
// of the implicitly typed variable
using System;
  
class GFG {
  
    // Main method
    static public void Main()
    {
  
        // Creating and initializing
        // implicitly typed variables
        // Using var keyword
        var a = 'f';
        var b = "GeeksforGeeks";
        var c = 30.67d;
        var d = false;
        var e = 54544;
  
        // Display the type
        Console.WriteLine("Type of 'a' is : {0} ", a.GetType());
  
        Console.WriteLine("Type of 'b' is : {0} ", b.GetType());
  
        Console.WriteLine("Type of 'c' is : {0} ", c.GetType());
  
        Console.WriteLine("Type of 'd' is : {0} ", d.GetType());
  
        Console.WriteLine("Type of 'e' is : {0} ", e.GetType());
    }
}

Producción:

Type of 'a' is : System.Char 
Type of 'b' is : System.String 
Type of 'c' is : System.Double 
Type of 'd' is : System.Boolean 
Type of 'e' is : System.Int32 

En C# 4.0 , se introduce un nuevo tipo que se conoce como tipo dinámico . Se utiliza para evitar la verificación de tipos en tiempo de compilación. El compilador no verifica el tipo de la variable de tipo dinámico en el momento de la compilación; en lugar de esto, el compilador obtiene el tipo en el momento de la ejecución. La variable de tipo dinámico se crea usando una palabra clave dinámica.

Ejemplo:

// C# program to illustrate how to get the
// actual type of the dynamic type variable
using System;
  
class GFG {
  
    // Main Method
    static public void Main()
    {
  
        // Dynamic variables
        dynamic val1 = "GeeksforGeeks";
        dynamic val2 = 3234;
        dynamic val3 = 32.55;
        dynamic val4 = true;
  
        // Get the actual type of
        // dynamic variables
        // Using GetType() method
        Console.WriteLine("Get the actual type of val1: {0}",
                                  val1.GetType().ToString());
  
        Console.WriteLine("Get the actual type of val2: {0}",
                                  val2.GetType().ToString());
  
        Console.WriteLine("Get the actual type of val3: {0}",
                                  val3.GetType().ToString());
  
        Console.WriteLine("Get the actual type of val4: {0}",
                                  val4.GetType().ToString());
    }
}

Producción:

Get the actual type of val1: System.String
Get the actual type of val2: System.Int32
Get the actual type of val3: System.Double
Get the actual type of val4: System.Boolean

A continuación, se muestran algunas diferencias entre var y la palabra clave dinámica en C#:

Var Dinámica
Se introduce en C# 3.0. Se introduce en C# 4.0
Las variables que se declaran usando la palabra clave var se escriben estáticamente. Las variables se declaran usando la palabra clave dinámica y se escriben dinámicamente.
El compilador decide el tipo de variable en el momento de la compilación. El compilador decide el tipo de variable en tiempo de ejecución.
La variable de este tipo debe inicializarse en el momento de la declaración. De modo que el compilador decidirá el tipo de la variable según el valor que inicializó. La variable de este tipo no necesita inicializarse en el momento de la declaración. Porque el compilador no conoce el tipo de la variable en tiempo de compilación.
Si la variable no se inicializa arroja un error. Si la variable no se inicializa, no arrojará un error.
Es compatible con intelliSense en Visual Studio. No es compatible con intelliSense en Visual Studio
var mivalor = 10; // declaración 1
myvalue = «GeeksforGeeks»; // declaración 2
Aquí el compilador arrojará un error porque el compilador ya ha decidido el tipo de la variable myvalue usando la declaración 1 que es un tipo entero. Cuando intenta asignar una string a la variable myvalue, el compilador dará un error porque viola el tipo de regla de seguridad.
myvalue dinámico = 10; // declaración 1
myvalue = «GeeksforGeeks»; // declaración 2
Aquí, el compilador no arrojará un error aunque el tipo de myvalue sea un número entero. Cuando asigna una string a myvalue, recrea el tipo de myvalue y acepta la string sin ningún error.
No se puede usar para propiedades o devolver valores de la función. Solo se puede usar como una variable local en función. Se puede usar para propiedades o devolver valores de la función.

Publicación traducida automáticamente

Artículo escrito por ankita_saini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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