💻 C# Desde Cero - Guía Completa

Aprende C# desde los fundamentos hasta conceptos avanzados

"C# is a modern, object-oriented, and type-safe programming language."
Explorar Temas

📖 Temas del Curso

Haz clic en cualquier tema para ver el contenido detallado

📌 Introducción a C#

C# (C Sharp) es un lenguaje de programación orientado a objetos desarrollado por Microsoft como parte de la plataforma .NET.

Características:

  • Tipado estático: Verificación de tipos en tiempo de compilación
  • Orientado a objetos: Clases, herencia, polimorfismo
  • Multiplataforma: .NET Core funciona en Windows, Linux, Mac
  • Moderno: Características como LINQ, async/await, pattern matching
💡 Dato curioso: C# fue creado por Anders Hejlsberg, quien también creó Turbo Pascal y TypeScript.
← Volver a temas

🌐 .NET y .NET Core

Diferencias:

.NET Framework .NET Core / .NET 5+
Solo Windows Cross-platform
Código cerrado Open source
Monolítico Modular

Instalar .NET SDK:

# Descargar desde dotnet.microsoft.com
# Verificar instalación
dotnet --version

# Crear proyecto
dotnet new console -n MiApp
dotnet run
← Volver a temas

📦 Variables y Tipos

Tipos de valor:

int edad = 30;
double altura = 1.75;
bool esEstudiante = true;
char inicial = 'J';
decimal salario = 1000.50m;

Tipos de referencia:

string nombre = "Juan";
var hobbies = new List<string> { "leer", "codificar" };
var persona = new { Nombre = "Juan", Edad = 30 };

Nullable types:

int? calificacion = null;
DateTime? fechaNacimiento = null;
← Volver a temas

🔧 Funciones y Métodos

Método básico:

public string Saludar(string nombre)
{
    return $"Hola {nombre}";
}

Múltiples retornos:

public (int suma, int resta) Operar(int a, int b)
{
    return (a + b, a - b);
}

var resultado = Operar(5, 3);
Console.WriteLine(resultado.suma); // 8

Expresión lambda:

Func<int, int> cuadrado = x => x * x;
Console.WriteLine(cuadrado(5)); // 25
← Volver a temas

🏗️ POO en C#

Clase y objeto:

public class Persona
{
    public string Nombre { get; set; }
    public int Edad { get; private set; }

    public Persona(string nombre, int edad)
    {
        Nombre = nombre;
        Edad = edad;
    }

    public void Saludar()
    {
        Console.WriteLine($"Hola, soy {Nombre}");
    }
}

Herencia:

public class Empleado : Persona
{
    public decimal Salario { get; set; }
}
← Volver a temas

📚 Colecciones y Genéricos

List<T>:

var numeros = new List<int> { 1, 2, 3, 4, 5 };
numeros.Add(6);
numeros.Remove(1);

Dictionary<TKey, TValue>:

var edades = new Dictionary<string, int>
{
    { "Juan", 30 },
    { "Maria", 25 }
};

edades["Pedro"] = 35;

HashSet<T>:

var unicos = new HashSet<int> { 1, 2, 2, 3 };
// Resultado: { 1, 2, 3 }
← Volver a temas

🔍 LINQ

Query syntax:

var pares = from n in numeros
              where n % 2 == 0
              select n;

Method syntax:

var pares = numeros.Where(n => n % 2 == 0)
                              .OrderBy(n => n)
                              .ToList();

Operaciones comunes:

var suma = numeros.Sum();
var promedio = numeros.Average();
var maximo = numeros.Max();
var primero = numeros.First();
← Volver a temas

⚡ Async/Await

Método asíncrono:

public async Task<string> ObtenerDatosAsync()
{
    await Task.Delay(1000);
    return "Datos obtenidos";
}

Uso con HttpClient:

public async Task<string> GetAsync(string url)
{
    using var client = new HttpClient();
    var response = await client.GetAsync(url);
    return await response.Content.ReadAsStringAsync();
}
⚠️ Importante: Usa async all the way. No mezcles código síncrono y asíncrono.
← Volver a temas

🌐 ASP.NET Core Web API

Controller:

[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
    [HttpGet]
    public IActionResult Get()
    {
        return Ok(new[] { "Juan", "Maria" });
    }

    [HttpGet("{id}")]
    public IActionResult GetById(int id)
    {
        return Ok(new { Id = id, Name = "Juan" });
    }
}
← Volver a temas

🗄️ Entity Framework Core

DbContext:

public class AppDbContext : DbContext
{
    public DbSet<User> Users { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder options)
    {
        options.UseSqlServer(connectionString);
    }
}

Consultas:

var users = await context.Users
    .Where(u => u.Age > 18)
    .ToListAsync();
← Volver a temas

🎯 Blazor

Componente Blazor:

@page "/counter"

<h3>Counter</h3>
<p>Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">
    Click me
</button>

@code {
    private int currentCount = 0;

    private void IncrementCount()
    {
        currentCount++;
    }
}
💡 Tip: Blazor permite crear aplicaciones web interactivas con C# en lugar de JavaScript.
← Volver a temas

📱 .NET MAUI

Página MAUI:

public class MainPage : ContentPage
{
    public MainPage()
    {
        var label = new Label
        {
            Text = "Hello, .NET MAUI!",
            HorizontalOptions = LayoutOptions.Center,
            VerticalOptions = LayoutOptions.Center
        };

        Content = label;
    }
}

Crear proyecto:

dotnet new maui -n MiApp
dotnet build
← Volver a temas

📚 Contenido del Curso

Módulo 1: Fundamentos

  • Introducción a C#
  • .NET y .NET Core
  • Variables y tipos
  • Funciones y métodos
Ir a temas →

Módulo 2: Intermedio

  • POO en C#
  • Colecciones y genéricos
  • LINQ
  • Async/await
Ir a temas →

Módulo 3: Avanzado

  • ASP.NET Core Web API
  • Entity Framework Core
  • Blazor
  • .NET MAUI
Ir a temas →

📝 Ejemplos Rápidos

Clase en C#

public class Persona
{
    public string Nombre { get; set; }
    public int Edad { get; set; }

    public void Saludar()
    {
        Console.WriteLine($"Hola, soy {Nombre}");
    }
}

LINQ Example

var numeros = new List<int> { 1, 2, 3, 4, 5 };
var pares = numeros.Where(n => n % 2 == 0).ToList();

📖 Recursos Adicionales

Herramientas

  • Visual Studio 2022
  • VS Code + C# extension
  • ReSharper

Comunidades

👨‍💻 Desarrollado por Isaac Esteban Haro Torres

Ingeniero en Sistemas · Full Stack · Automatización · Data

📧 Email: zackharo1@gmail.com

📱 WhatsApp: 098805517

💻 GitHub: github.com/ieharo1

🌐 Portafolio: ieharo1.github.io/portafolio-isaac.haro/