una - ¿La nueva palabra clave ''dinámica'' C#4.0 desaprueba la palabra clave ''var''?
utilice la palabra new para crear una instancia de objeto c# (3)
Cuando sale C # 4.0 y tenemos la palabra clave dinámica como se describe en esta excelente presentación de Anders Hejlsberg , (C # está evolucionando más rápido de lo que yo puedo seguir. No tuve mucho tiempo para familiarizarme con la palabra clave var)
¿Todavía necesitaría la palabra clave var? ¿Hay algo que var pueda hacer ... esa dinámica no puede?
var x = SomeFunctionThatIKnowReturnsSomeKindOfList();
// do something with x
dynamic x = SomeFunctionThatIKnowReturnsSomeKindOfList();
// do something with x
Dynamic y var representan dos ideas completamente diferentes.
var
Var esencialmente le pide al compilador que averigüe el tipo de variable en función de la expresión del lado derecho de la declaración de asignación. La variable se trata exactamente como si se declarara explícitamente como el tipo de la expresión. Por ejemplo, las siguientes dos declaraciones son equivalentes
var a = "foo";
string a = "foo";
La clave para llevar aquí es que "var" es 100% seguro y es una operación en tiempo de compilación
dinámica
La dinámica es en muchos aspectos exactamente lo opuesto a var. Usar la dinámica es esencialmente eliminar todo tipo de seguridad para la variable en particular. De muchas maneras no tiene ningún tipo. Cuando llama a un método o campo en la variable, la determinación sobre cómo invocar ese campo ocurre en tiempo de ejecución. Por ejemplo
dynamic d = SomeOperation();
d.Foo(); // Will this fail or not? Won''t know until you run the program
La clave para llevar aquí es que "dinámico" no es seguro y es una operación en tiempo de ejecución
No, son muy diferentes.
var
significa "inferir el tipo de la variable en tiempo de compilación", pero todavía está completamente vinculado de forma estática.
dynamic
significa "asumir que puedo hacer lo que quiera con esta variable", es decir, el compilador no sabe qué operaciones están disponibles, y el DLR determinará qué significan realmente las llamadas en el momento de la ejecución.
Espero utilizar la dynamic
muy raramente, solo cuando realmente quiero un comportamiento dinámico:
-
var
permite detectar errores de escritura, etc. en tiempo de compilación - el código enlazado estáticamente siempre se ejecutará más rápido que el código enlazado dinámicamente (incluso si la diferencia se vuelve razonablemente pequeña)
- el código enlazado estáticamente brinda más soporte en tiempo de compilación más allá de solo errores: puede encontrar jerarquías de llamadas, la refactorización funcionará mejor, Intellisense está disponible, etc.
Sí, todavía necesitarás var:
Var es una variable cuyo tipo será inferido por el compilador.
dinámico tendrá su tipo asignado en tiempo de ejecución
Asi que:
Var i = "Hello World"
tendrá su tipo inferido como un tipo de cadena al hacerlo, intellisence le dará todos los métodos que la cadena puede usar,
i.Split("/")
Donde como:
dynamic i = "Hello World"
no tendrá su tipo inferido hasta el tiempo de ejecución porque el compilador aún no sabe qué tipo es, pero aún así le permitirá hacer:
i.Split("/")
pero cuando llama al método que necesita puede fallar porque el tipo es incorrecto y el método no está allí.