C#: Desarrollo Moderno con .NET

Domina C# y el ecosistema .NET para aplicaciones empresariales y juegos


C#: Desarrollo Moderno con .NET
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

  1. LINQ - Consultas integradas en el lenguaje
  2. Async/Await - Programación asíncrona elegante
  3. Pattern Matching - Coincidencia de patrones expresiva
  4. Records - Tipos inmutables concisos
  5. Nullable Reference Types - Seguridad contra null
  6. 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!