ventajas sharp programacion lenguaje ejemplos desventajas descargar caracteristicas antecedentes c# syntax c#-6.0

sharp - ¿Qué es esta extraña sintaxis de C#y cómo la construyo?



lenguaje de programacion c# ejemplos (4)

Esta pregunta ya tiene una respuesta aquí:

Al leer un proyecto, encontré un extraño código de C #:

public class F : IElement { public int CurrentHp { get; } = 10; public bool IsDead => CurrentHp <= 0; }

Normalmente escribiría algo como:

public class F : IElement { public const int CurrentHp = 10; public bool IsDead { get { return CurrentHp <= 0; } } }

My Visual Studio 2013 tampoco puede reconocer el primer ejemplo.

¿Qué es esta sintaxis y qué debo hacer para que este proyecto sea edificable?


Como otras personas dijeron que es nuevas características de C # 6. Ver la lista completa en 1

Sin embargo, más correctamente esto se traduciría en esto antes de C # 6:

public class F : IElement { public int CurrentHp { get; private set }; public bool IsDead { get { return CurrentHp <= 0; } } public F() { CurrentHp = 10; } }

Nuevas características de lenguaje en C # 6



Este es tu código si usas C # 6:

public bool IsDead => CurrentHp <= 0;

Es solo una propiedad con un get , si usa este operador => .

En versiones anteriores, escribirías algo como esto:

public bool IsDead { get { return CurrentHp <= 0; } }


=> es un nuevo operador en C # 6 e indica una Función de expresión de cuerpo para usar para ese captador.

Sus dos ejemplos son sinónimos en lo que respecta al compilador y simplemente devuelve el valor asignado. El => es azúcar sintáctico para facilitar el desarrollo y requiere menos líneas de código para lograr el mismo resultado.

Sin embargo, no podrá compilar a menos que actualice a VS2015 con la última versión del compilador.

Editar:

Como dijo Philip Kendall y Carl Leth en los comentarios, las primeras líneas en cada uno no son exactamente sinónimos de public const int CurrentHp = 10; es un campo y public int CurrentHp { get; } = 10; public int CurrentHp { get; } = 10; es una propiedad. Aunque en un nivel alto el resultado es el mismo (asignando un valor de 10 a CurrentHp con la propiedad solo configurable en el constructor de la clase), difieren en eso:

Con const int CurrentHp = 10 , CurrentHp siempre será 10 , ocupará 4 bytes en total y se puede acceder estáticamente. int CurrentHp { get; } = 10 int CurrentHp { get; } = 10 predeterminado 10 , pero se puede cambiar en el constructor de F y, por lo tanto, puede ser diferente por instancia y no se puede acceder estáticamente.