C#: Desarrollo Moderno con .NET
Domina C# y el ecosistema .NET para aplicaciones empresariales y juegos
1 Cargando...
C#: Desarrollo Moderno con .NET
C# es un lenguaje de programación moderno, orientado a objetos y type-safe desarrollado por Microsoft. Desde su lanzamiento en 2000, C# ha evolucionado hasta convertirse en un lenguaje potente y versátil usado en desarrollo web, desktop, móvil, juegos (Unity) y cloud computing.
¿Por qué C#? C# combina la productividad de lenguajes de alto nivel con rendimiento cercano al nivel de sistema. Con .NET Core/5+, ahora es verdaderamente multiplataforma.
Características Modernas
- LINQ - Consultas integradas en el lenguaje
- Async/Await - Programación asíncrona elegante
- Pattern Matching - Coincidencia de patrones expresiva
- Records - Tipos inmutables concisos
- Nullable Reference Types - Seguridad contra null
- Source Generators - Generación de código en tiempo de compilación
Fundamentos
Tipos y Variables
// Tipos primitivos
string nombre = "María";
int edad = 25;
double altura = 1.68;
bool activo = true;
char inicial = 'M';
decimal salario = 5000.50m;
// Inferencia de tipo con var
var email = "[email protected]";
var lista = new List<int> { 1, 2, 3 };
// Nullable types
int? valorOpcional = null;
valorOpcional = 42;
// Arrays
int[] numeros = { 1, 2, 3, 4, 5 };
// Collections
var frutas = new List<string> { "manzana", "banana", "naranja" };
var usuarios = new Dictionary<string, int>
{
["alice"] = 25,
["bob"] = 30
};
// Tuplas
(string Nombre, int Edad) persona = ("María", 25);
var (nombre2, edad2) = persona; // Deconstruction
Clases y Objetos
// Clase tradicional
public class Usuario
{
public int Id { get; set; }
public string Nombre { get; set; }
public string Email { get; private set; }
public DateTime CreadoEn { get; init; }
public Usuario(int id, string nombre, string email)
{
Id = id;
Nombre = nombre;
Email = email;
CreadoEn = DateTime.UtcNow;
}
public string Saludar() => $"¡Hola, {Nombre}!";
public bool EstaActivo => CreadoEn > DateTime.UtcNow.AddDays(-30);
}
// Record (C# 9+) - inmutable por defecto
public record Producto(string Nombre, decimal Precio, int Cantidad)
{
public decimal ValorTotal => Precio * Cantidad;
}
// Clase abstracta
public abstract class Forma
{
public abstract double CalcularArea();
public abstract double CalcularPerimetro();
}
public class Rectangulo : Forma
{
public double Ancho { get; }
public double Alto { get; }
public Rectangulo(double ancho, double alto)
{
Ancho = ancho;
Alto = alto;
}
public override double CalcularArea() => Ancho * Alto;
public override double CalcularPerimetro() => 2 * (Ancho + Alto);
}
LINQ
var productos = new List<Producto>
{
new("Laptop", 3500, 2),
new("Mouse", 150, 10),
new("Teclado", 300, 5),
new("Monitor", 1200, 3)
};
// Method syntax
var baratos = productos
.Where(p => p.Precio <= 500)
.OrderBy(p => p.Nombre)
.ToList();
// Agregaciones
var total = productos.Sum(p => p.ValorTotal);
var promedio = productos.Average(p => p.Precio);
var masBarato = productos.MinBy(p => p.Precio);
// Agrupación
var porRangoPrecio = productos
.GroupBy(p => p.Precio switch
{
< 200 => "Barato",
< 1000 => "Medio",
_ => "Caro"
})
.ToDictionary(g => g.Key, g => g.ToList());
Async/Await
public class ServicioHttp
{
private readonly HttpClient _client = new();
public async Task<string> ObtenerDatosAsync(string url)
{
try
{
var response = await _client.GetAsync(url);
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync();
}
catch (HttpRequestException ex)
{
Console.WriteLine($"Error: {ex.Message}");
throw;
}
}
public async Task<IEnumerable<string>> ObtenerVariosAsync(IEnumerable<string> urls)
{
var tareas = urls.Select(url => ObtenerDatosAsync(url));
return await Task.WhenAll(tareas);
}
}
Pattern Matching
public static string DescribirObjeto(object obj) => obj switch
{
null => "Nulo",
string s => $"String: {s}",
int n when n > 0 => $"Entero positivo: {n}",
int n => $"Entero: {n}",
{ } x => $"Objeto: {x.GetType().Name}"
};
public record Pedido(string Estado, decimal Total, bool Prioritario);
public static decimal CalcularDescuento(Pedido pedido) => pedido switch
{
{ Estado: "VIP", Total: > 1000 } => pedido.Total * 0.20m,
{ Prioritario: true, Total: > 500 } => pedido.Total * 0.15m,
{ Total: > 1000 } => pedido.Total * 0.10m,
_ => 0
};
Lista de Verificación de Aprendizaje
- Dominar tipos, clases e interfaces
- Aprender LINQ y expresiones lambda
- Estudiar async/await y Task
- Explorar pattern matching
- Practicar con ASP.NET Core
- Entender dependency injection
- Construir una API REST completa
Recursos Esenciales
Cita
“C# fue diseñado para ser un lenguaje simple, moderno, de propósito general y orientado a objetos.” - Anders Hejlsberg
¡C# es una excelente opción para desarrollo empresarial, juegos con Unity y aplicaciones cloud-native!