C# es un lenguaje de programación desarrollado por Microsoft. Es un lenguaje de alto nivel, orientado a objetos y de propósito general.
Se utiliza en el desarrollo de aplicaciones de escritorio, web y móviles, principalmente, en el ecosistema de Microsoft.
Estructura básica
Hola Mundo en C#
El clásico ejemplo para imprimir “Hola Mundo” en consola.
using System;
class Program {
static void Main(string[] args) {
Console.WriteLine("Hola Mundo");
}
}
Estructura de un programa
Los programas en C# tienen una estructura modular. Todo el código debe estar dentro de una clase. El punto de entrada de la ejecución es el método Main
.
Comentarios
C# admite comentarios de una línea y multilínea.
// Esto es un comentario de una línea
/* Esto es un
comentario multilínea */
Variables y Tipos de Datos
Declaración de variables
int numero = 10;
string texto = "Hola";
double decimal = 4.5;
bool esVerdad = true;
Tipos de datos comunes
Tipo | Tamaño | Descripción |
---|---|---|
int | 32 bits | Enteros |
double | 64 bits | Decimales de doble precisión |
float | 32 bits | Decimales de precisión simple |
char | 16 bits | Carácter Unicode |
string | - | Cadena de texto |
bool | 1 bit | Valor booleano |
Variables constantes
Las variables cuyo valor no cambia se definen con const
.
const double PI = 3.1416;
Estructuras de control
Condicionales
Condicional if-else
int a = 5;
if (a > 10) {
Console.WriteLine("Mayor que 10");
} else if (a == 10) {
Console.WriteLine("Igual a 10");
} else {
Console.WriteLine("Menor que 10");
}
Condicional switch
int dia = 3;
switch (dia) {
case 1:
Console.WriteLine("Lunes");
break;
case 2:
Console.WriteLine("Martes");
break;
default:
Console.WriteLine("Otro día");
break;
}
Bucles
Bucle for
for (int i = 0; i < 5; i++) {
Console.WriteLine(i);
}
Bucle while
int i = 0;
while (i < 5) {
Console.WriteLine(i);
i++;
}
Bucle do-while
int i = 0;
do {
Console.WriteLine(i);
i++;
} while (i < 5);
Funciones y Métodos
Declaración de funciones
int Sumar(int a, int b) {
return a + b;
}
Llamar una función
int resultado = Sumar(5, 3);
Console.WriteLine(resultado); // Imprime 8
Funciones con sobrecarga
int Multiplicar(int a, int b) {
return a * b;
}
double Multiplicar(double a, double b) {
return a * b;
}
Parámetros Opcionales
void Saludar(string nombre, string saludo = "Hola")
{
Console.WriteLine($"{saludo}, {nombre}!");
}
Saludar("Luis"); // Hola, Luis!
Saludar("María", "Bonjour"); // Bonjour, María!
Programación Orientada a Objetos (POO)
Definición de una clase
class Persona {
public string Nombre;
public int Edad;
public void Saludar() {
Console.WriteLine($"Hola, soy {Nombre}");
}
}
Crear un objeto
Persona persona1 = new Persona();
persona1.Nombre = "Luis";
persona1.Saludar(); // Imprime "Hola, soy Luis"
Propiedades
class Producto
{
private string _nombre;
public string Nombre
{
get { return _nombre; }
set { _nombre = value; }
}
}
Definir un constructor
class Persona {
public string Nombre;
public int Edad;
public Persona(string nombre, int edad) {
Nombre = nombre;
Edad = edad;
}
}
Crear un objeto con constructor
Persona persona2 = new Persona("Ana", 25);
Console.WriteLine(persona2.Nombre); // Imprime "Ana"
Definición de interfaz
interface IVehiculo {
void Arrancar();
}
class Coche : IVehiculo {
public void Arrancar() {
Console.WriteLine("El coche arranca");
}
}
Definir clase genérica
class Caja<T> {
public T Contenido { get; set; }
}
Caja<int> cajaInt = new Caja<int> { Contenido = 5 };
Console.WriteLine(cajaInt.Contenido); // Imprime 5
Herencia
Herencia entre clases
class Animal {
public void Comer() {
Console.WriteLine("Estoy comiendo");
}
}
class Perro : Animal {
public void Ladrar() {
Console.WriteLine("Guau Guau");
}
}
Crear una instancia de clase derivada
Perro perro = new Perro();
perro.Comer(); // Imprime "Estoy comiendo"
perro.Ladrar(); // Imprime "Guau Guau"
Polimorfismo
Métodos virtuales y override
class Animal {
public virtual void HacerSonido() {
Console.WriteLine("Sonido genérico");
}
}
class Perro : Animal {
public override void HacerSonido() {
Console.WriteLine("Guau");
}
}
Colecciones y arrays
Declarar un array
int[] numeros = {1, 2, 3, 4, 5};
Acceder a elementos del array
Console.WriteLine(numeros[0]); // Imprime 1
Listas genéricas
List<int> lista = new List<int>();
lista.Add(10);
lista.Add(20);
Console.WriteLine(lista.Count); // Imprime 2
Recorrer una lista
foreach (int numero in lista) {
Console.WriteLine(numero);
}
Manejo de Excepciones
Try-Catch para manejo de errores
try {
int resultado = 10 / 0;
} catch (DivideByZeroException ex) {
Console.WriteLine("Error: División por cero");
} finally {
Console.WriteLine("Bloque finally ejecutado");
}
Delegados y Eventos
Declaración de un delegado
delegate void Operacion(int x, int y);
class Programa {
static void Sumar(int a, int b) {
Console.WriteLine(a + b);
}
static void Main(string[] args) {
Operacion operacion = Sumar;
operacion(5, 3); // Imprime 8
}
}
Definición y uso de un evento
class EventoEjemplo {
public delegate void DelegadoEvento();
public event DelegadoEvento Evento;
public void DispararEvento() {
if (Evento != null) {
Evento();
}
}
}
class Programa {
static void Main(string[] args) {
EventoEjemplo ej = new EventoEjemplo();
ej.Evento += () => Console.WriteLine("Evento Disparado");
ej.DispararEvento(); // Imprime "Evento Disparado"
}
}
LINQ (Consultas integradas en el lenguaje)
Consulta básica con LINQ
int[] numeros = {1, 2, 3, 4, 5};
var resultado = numeros.Where(n => n > 2).ToList();
foreach (var n in resultado) {
Console.WriteLine(n); // Imprime 3, 4, 5
}
Archivos y Entrada/Salida
Escribir en un archivo
using System.IO;
File.WriteAllText("archivo.txt", "Contenido del archivo");
Leer de un archivo
string contenido = File.ReadAllText("archivo.txt");
Console.WriteLine(contenido);
Asincronía y Tareas
Declaración de método async
y uso de await
async Task<int> LlamarApiAsync() {
await Task.Delay(1000); // Simula una operación asincrónica
return 42;
}
Uso de await
async Task Main() {
int resultado = await LlamarApiAsync();
Console.WriteLine(resultado); // Imprime 42
}
Espacios de nombres
Usar using
para incluir namespaces
using System; // Incluye el espacio de nombres System
Console.WriteLine("Hola Mundo");
Métodos de Extensión
Definir un método de extensión
public static class Extensiones {
public static int Duplicar(this int numero) {
return numero * 2;
}
}
int numero = 10;
Console.WriteLine(numero.Duplicar()); // Imprime 20