Links: University, Marcos de Desarrollo

Apuntes

Lenguaje de prógramación Orientado a Objetos (todo hereda de System.Object) diseñado con el objetivo de reducir el tiempo de desarrollo. Es usado para el desarrollo de aplicaciones en la plataforma ASP.NET.

Hello World

using System;
namespace Es.Udc.DotNet.CSharpTutorial
{
  /*
  * Class HelloWorld
  * Description: Simple C# example
  */
  class HelloWorld
  {
    #region Test code. Uncoment for testing
 
    /* entry point */
    public static void Main()
    {
      Console.WriteLine("Hello World!");
      Console.ReadLine();
    }
 
    #endregion
  }
 }

System.Object

public class Object
{
  public Object();
  public virtual bool Equals(object obj);
  public static bool Equals(object objA, object objB);
  public virtual int GetHashCode();
  public Type GetType();
  protected object MemberwiseClone();
  public static bool ReferenceEquals(object objA, object objB);
  public virtual string ToString();
}

Compilador C#

Ubicación Compilador C#

C:\windows\Microsoft.NET\Framework\vn.n.nnn\csc.exe

Sintaxis

csc [opciones] fich1.cs [, fich2.cs]

Opciones

/out:ficheroSalida
/t:winexe (Interfaz gráfica de ventanas)
/t:library
/r:librería.dll (Por defecto se referencia a mscorlib.dll)
/main:clase

Namespaces

Los namespaces son contenedores l’ogicos que agrupan tipos relaciobnados, como clases, interfaces, enumeraciones, etc. sirven para organizar el c’odigo y evitar conflictos de nombres. Se definen con la palabra clave namespace

namespace MiApp {
  class MiClase {
    //code
  }
}

Boxing & Unboxing

Boxing es el proceso de convertir un tipo de valor (como int o float) en un tipo de referencia como object. Unboxing es el proceso inverso.

int valor = 123;
object caja = valor; // Boxing
int desboxeado = (int)caja; // Unboxing

Clases

En C#, una clase es un plantilla para crear objetos. Las clases pueden tener campos, m’etodos, propiedades, eventos y más.

public abstract class Figura {
    public abstract void Dibujar();
}
 
public sealed class Circulo : Figura {
    public override void Dibujar() {
        // Implementación
    }
}

Clases Abstractas

No se pueden instanciar directamente y pueden contener métodos abstractos que deben ser implementados por clases derivadas.

Clases Selladas (sealed)

No pueden ser heredadas

Clases Parciles (partial)

Permiten dividir la definición de una clase en varios archivos

Enums

Los enums son un tipo especial que permite definir un conjunto de constantes con nombre. Son útiles para representar conjuntos de valores relacionados.

enum DiasDeLaSemana {
    Lunes,
    Martes,
    Miercoles,
    Jueves,
    Viernes,
    Sabado,
    Domingo
}

Interfaces

Una interfaz define un contrato que las clases pueden implementar. Contiene definiciones de métodos, propiedades, eventos o indexadores, pero no proporciona implementación.

public interface IVehiculo {
    void Conducir();
    int NumeroDeRuedas { get; }
}
 
public class Coche : IVehiculo {
    public void Conducir() {
        // Implementación
    }
 
    public int NumeroDeRuedas { get { return 4; } }
}

Modificadores de Acceso

Deteminan la visibilidad de clases y miebros de clase:

  • public: Accesible desde cualquier lugar
  • private: Accesible solo dentro de la clase
  • protected: Accesible dentro de la clase y clases derivadas
  • internal: Accesible solo dentro del mismo ensamblado

Excepciones

Las excepciones son mecanismos para manejar errores y condiciones excepcionales.

try {
    // Código que puede lanzar una excepción
} catch (Exception ex) {
    // Manejo de la excepción
} finally {
    // Código que siempre se ejecuta
}

Sentencia using

La sentencia using asegura que los recursos se liberen correctamente cuando ya no son necesarios. Es especialmente útil para manejar recursos que implementan IDisponible, como archivos o conexiones de base de datos.

using (StremReader sr = new StreamReader("archivo.txt")) {
  string contenido = sr.ReadToEnd();
}

Generics

Los genéricos permiten definir clases, métodos y estructuras con tipos de datos que se especifican en tiempo de compilación. Proporcionan flexibilidad y reutilización de código.

public class Caja<T> {
    private T contenido;
    public Caja(T contenido) {
        this.contenido = contenido;
    }
 
    public T ObtenerContenido() {
        return contenido;
    }
}