Para este artículo hemos compilado para ti las principales novedades que traerá bajo el brazo el lenguaje de C# 6.0. Esperamos que estas sean un alivio para los programadores de dicho lenguaje que sepáis cómo aplicarlas en vuestros futuros proyectos. Sin más dilación os dejo con lo nuevo que traera C# 6.0
Mejoras en las auto-propiedades
Podrás inicializar las propiedades de la misma manera que inicializas las variables, campos...
public class Employee
{
public string FirstName { get; set; } = "Jorge";
public string LastName { get; set; } = "Lopez";
}
Parámetros en clases y structs
Podrás pasar parámetros a las clases/structs de la misma manera que lo haces con los métodos y funciones.
public class Employee(string firstName, string lastName)
{
public string FirstName { get; set; } = firstName;
public string LastName { get; set; } = lastName;
}
También puedes agregar la lógica en parámetros como:
public class Employee(string firstName, string lastName)
{
{
if (Equals(firstName,null))
{throw new ArgumentNullException("firstName");}
if (Equals(lastName,null))
{throw new ArgumentNullException("lastName");}
}
public string FirstName { get; } = firstName;
public string LastName { get; } = lastName;
}
Uso de clases estáticas
En C# 6.0, Microsoft anunció que nuestro CS Compiler tendrá un nuevo comportamiento que nos permitirá llamar a todos los métodos estáticos de clases estáticas sin el nombre de las clases.
Código en C# 5.0
static void Main(string[] args)
{
Console.WriteLine("Introduce el primer numero :");
int num1 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Introduce el segundo numero :");
int num2 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Multiplicacion : {0}", (num1 * num2));
Console.ReadLine();
}
Código en C# 6.0
using static System.Console;
using static System.Convert;
public class UsingStaticTest
{
static void Main(string[] args)
{
WriteLine("Introduce el primer numero:");
int num1 = ToInt32(ReadLine());
WriteLine("Introduce el segundo numero:");
int num2 = ToInt32(ReadLine());
WriteLine("Multiplicacion : {0}", (num1 * num2));
ReadLine();
}
}
Filtros de excepción
Con esta nueva función, podrás agregar condicionantes para que el bloque catch decida qué bloque catch se debe ejecutarse basándose en la condición.
try
{
throw new Exception("Jorge");
}
catch (Exception ex) if (ex.Message == "Jorge")
{
// esto se ejecutará porque los mensajes de excepcion coinciden
}
catch (Exception ex) if (ex.Message == "Lopez")
{
// esto no se ejecutará porque los mensajes de excepcion no coinciden
}
Operadores condicionales que comprueban nulos
El operador condicional que comprueba nulos es un nuevo concepto en C# 6.0 que comprueba automáticamente referencias nulas. En la versión anterior de C#, 5.0, si accedemos a cualquier propiedad de una clase, primero tendríamos que comprobamos si el objeto de la clase es nulo o no es nulo, para después leer la propiedad. Pero en C# 6.0, podemos hacer lo mismo con el operador "?".
Código en C# 5.0
namespace ConditionalTest
{
class Program
{
static void Main()
{
Employee emp = new Employee(){
FullName = "Jorge Lopez",
EmpAddress = new Address()
{
ResidenceAddress = "Vasco da Gama, 4",
OfficeAddress = "Cervantes, 36"
}
}
if(emp!= null && emp.EmpAddress!=null)
{
WriteLine((emp.FullName) + " " + (emp.EmpAddress.ResidenceAddress??"No Address"));
}
ReadLine();
}
}
class Employee
{
public string FullName { get; set; }
public Address EmpAddress { get; set; }
}
class Address
{
public string ResidenceAddress { get; set; }
public string OfficeAddress { get; set; }
}
}
Código en C# 6.0
namespace ConditionalTest
{
class Program
{
static void Main()
{
Employee emp = new Employee(){
FullName = "Jorge Lopez",
EmpAddress = new Address()
{
HomeAddress = "Vasco da Gama, 4",
OfficeAddress = "Cervantes, 36"
}
}
WriteLine((emp?.FullName) + " " + (emp?.EmpAddress?.ResidenceAddress??"No Address"));
ReadLine();
}
}
class Employee
{
public string FullName { get; set; }
public Address EmpAddress { get; set; }
}
class Address
{
public string ResidenceAddress { get; set; }
public string OfficeAddress { get; set; }
}
}
Inicialización de índices
C# 6.0 introduce una nueva sintaxis para inicializar índices. Fíjate en los corchetes del próximo ejemplo:
Código en C# 5.0
var persons = new Dictionary<int, string> {
{ 3, "Jorge" },
{ 4, "Lopez" },
{ 6, "Guapo" }
};
Código en C# 6.0
var persons = new Dictionary<int, string> {
[3] = "Jorge",
[4] = "Lopez",
[6] = "Guapo"
};
El símbolo $
C# introduce una nueva manera de inicializar y acceder a los índices
var persons = new Dictionary<string, string>()
{
$first = "Jorge"
};
/en C# 5.0
persons["first"] = "Jorge";
// en C# 6.0
persons.$first = "Jorge";
Interpolación de cadenas
Se ha mejorado la sintaxis cuando se incluyen variables dentro de cadenas, ahora podemos escapar una cadena para colocar variables sin usar el dichoso String.format.
string FullName = String.Format("{0} {1}",FirstName,LastName);
En C# 6.0 se añade la interpolación de cadenas (usando el caracter $ para formatear string) que provee al formato del string con la fuente del valor del parámetro en sí.
string FullName = $"{FirstName} {LastName}";
La expresión nameof
Antes de C# 6.0, cuando necesitábamos utilizar una propiedad, una función o un nombre de data member en un mensaje como un string, teníamos que utilizar el nombre como modificable en "name" en la cadena y en el futuro, si mi propiedad o los nombres de los métodos se modificaban, teníamos que cambiar todos los mensajes en cualquier formulario y en cada página.
Para resolver este problema, C# 6.0 introduce nameof como una nueva palabra clave que devolverá un string literal del nombre de la propiedad o del método.
Código en C# 5.0
namespace NameOfTest
{
class Program
{
static void Main(string[] args)
{
Employee emp = new Employee();
WriteLine("{0} : {1}", "EmpCode", emp.EmpCode);
WriteLine("{0} : {1}", "EmpName", emp.EmpName);
ReadLine();
}
}
class Employee
{
public int EmpCode{ get; set; } = 101;
public string EmpName { get; set; } = "Jorge";
}
}
Código en C# 6.0
namespace NameOfTest
{
class Program
{
static void Main(string[] args)
{
Employee emp = new Employee();
WriteLine("{0} : {1}", nameof(Employee.EmpCode), emp.EmpCode);
WriteLine("{0} : {1}", nameof(Employee.EmpName), emp.EmpName);
ReadLine();
}
}
class Employee
{
public int EmpCode{ get; set; } = 101;
public string EmpName { get; set; } = "Jorge";
}
}
Y hasta aquí las nuevas mejores de C# 6.0. Como programadores de este lenguaje supongo que las estaréis esperando con ganas al igual que nosotros. ¿Qué le pides tú a este nuevo lenguaje? Indícanoslo en los comentarios...
