Ir al contenido principal

Estructura básica de un programa en C#

Introducción

Cuando escribimos código en C#, seguimos una estructura organizada que facilita la lectura, mantenimiento y ejecución del programa. Esta estructura no es arbitraria: está diseñada para que el compilador pueda entender correctamente nuestro código y transformarlo en instrucciones ejecutables por el ordenador. En este artículo, exploraremos los elementos fundamentales que componen cualquier programa en C#, desde las directivas using hasta la estructura de clases y métodos. Comprender estos componentes te proporcionará una base sólida para desarrollar aplicaciones más complejas en el futuro.

Componentes principales de un programa en C#

Directivas using

Las directivas using se encuentran al principio del archivo y permiten utilizar tipos definidos en otros espacios de nombres sin tener que escribir el nombre completo cada vez que los referenciamos.

using System;
using System.Collections.Generic;
using System.Text;

Estas líneas nos permiten usar clases como Console (de System) o List<T> (de System.Collections.Generic) directamente, sin tener que escribir System.Console o System.Collections.Generic.List<T>.

Espacios de nombres (namespaces)

Los espacios de nombres organizan el código en grupos lógicos, evitando conflictos de nombres entre diferentes partes de una aplicación o entre distintas bibliotecas.

namespace MiAplicacion
{
    // Aquí irá el código de tu programa
}

El espacio de nombres actúa como un contenedor para clases y otros tipos. Es una buena práctica usar un nombre que identifique tu proyecto o la funcionalidad específica del código.

Clases

Las clases son los bloques fundamentales en C#. Todo el código ejecutable debe estar dentro de una clase.

namespace MiAplicacion
{
    class Program
    {
        // Aquí irán los miembros de la clase (métodos, propiedades, etc.)
    }
}

En un programa simple, suele haber una clase llamada Program, pero puedes crear tantas clases como necesites y nombrarlas según su propósito.

El método Main

El método Main es el punto de entrada de cualquier aplicación de consola en C#. Cuando ejecutas tu programa, el sistema operativo busca este método y comienza la ejecución desde ahí.

namespace MiAplicacion
{
    class Program
    {
        static void Main(string[] args)
        {
            // Aquí va el código que se ejecutará
            Console.WriteLine("¡Hola desde el método Main!");
        }
    }
}

Analicemos los componentes del método Main:

  • static: Indica que el método pertenece a la clase y no a una instancia específica de la clase.
  • void: Especifica que el método no devuelve ningún valor.
  • Main: El nombre del método, que debe ser exactamente "Main" (respetando mayúsculas).
  • string[] args: Un array de cadenas que contiene los argumentos de línea de comandos.

Instrucciones y expresiones

Dentro del método Main (y otros métodos), escribimos instrucciones que realizan acciones específicas:

static void Main(string[] args)
{
    // Esto es una instrucción que declara una variable
    int edad = 25;
    
    // Esto es una instrucción que muestra texto en la consola
    Console.WriteLine("Mi edad es: " + edad);
    
    // Esto es una instrucción con una expresión (edad * 2)
    int edadDoble = edad * 2;
    
    // Otra instrucción de salida
    Console.WriteLine("El doble de mi edad es: " + edadDoble);
}

Las instrucciones terminan con punto y coma (;) y pueden contener expresiones (como edad * 2) que se evalúan para producir un valor.

Bloques de código

Los bloques de código se delimitan mediante llaves { } y agrupan instrucciones relacionadas:

static void Main(string[] args)
{
    // Este es un bloque de código
    {
        int numero = 10;
        Console.WriteLine("El número es: " + numero);
    } // El ámbito de 'numero' termina aquí
    
    // Esta línea daría error porque 'numero' ya no existe
    // Console.WriteLine(numero);
    
    // Otro bloque con una estructura de control
    if (DateTime.Now.Hour < 12)
    {
        Console.WriteLine("¡Buenos días!");
    }
    else
    {
        Console.WriteLine("¡Buenas tardes o noches!");
    }
}

Los bloques también definen el ámbito (scope) de las variables, limitando dónde pueden ser utilizadas.

Ejemplo completo

Veamos un ejemplo completo que incluye todos los elementos explicados:

using System;

namespace MiPrimerPrograma
{
    class Program
    {
        static void Main(string[] args)
        {
            // Mostramos un mensaje de bienvenida
            Console.WriteLine("¡Bienvenido a mi primer programa en C#!");
            
            // Solicitamos el nombre al usuario
            Console.Write("Por favor, introduce tu nombre: ");
            string nombre = Console.ReadLine();
            
            // Solicitamos la edad
            Console.Write("Ahora, introduce tu edad: ");
            int edad = Convert.ToInt32(Console.ReadLine());
            
            // Calculamos el año de nacimiento aproximado
            int añoActual = DateTime.Now.Year;
            int añoNacimiento = añoActual - edad;
            
            // Mostramos un mensaje personalizado
            Console.WriteLine($"Hola {nombre}, naciste aproximadamente en el año {añoNacimiento}.");
            
            // Esperamos a que el usuario presione una tecla antes de cerrar
            Console.WriteLine("Presiona cualquier tecla para salir...");
            Console.ReadKey();
        }
    }
}

En este ejemplo:

  1. Incluimos la directiva using System para acceder a clases como Console y DateTime.
  2. Definimos un espacio de nombres llamado MiPrimerPrograma.
  3. Creamos una clase Program.
  4. Implementamos el método Main como punto de entrada.
  5. Dentro de Main, escribimos instrucciones que:
    • Muestran mensajes al usuario
    • Capturan entrada del usuario
    • Realizan cálculos sencillos
    • Muestran resultados personalizados

Estructura de programas más complejos

A medida que tus programas crezcan, incluirás más elementos:

Múltiples clases

Los programas reales suelen tener múltiples clases, cada una con su responsabilidad específica:

namespace GestionBiblioteca
{
    class Program
    {
        static void Main(string[] args)
        {
            Libro miLibro = new Libro("Don Quijote", "Miguel de Cervantes");
            miLibro.MostrarInfo();
        }
    }
    
    class Libro
    {
        private string titulo;
        private string autor;
        
        public Libro(string titulo, string autor)
        {
            this.titulo = titulo;
            this.autor = autor;
        }
        
        public void MostrarInfo()
        {
            Console.WriteLine($"Libro: {titulo}, Autor: {autor}");
        }
    }
}

Métodos adicionales

Además del método Main, puedes crear otros métodos para organizar mejor tu código:

class Program
{
    static void Main(string[] args)
    {
        SaludarUsuario();
        int resultado = Sumar(5, 3);
        Console.WriteLine($"El resultado de la suma es: {resultado}");
    }
    
    static void SaludarUsuario()
    {
        Console.WriteLine("¡Hola! Bienvenido al programa.");
    }
    
    static int Sumar(int a, int b)
    {
        return a + b;
    }
}

Archivos adicionales

Los proyectos C# más grandes se organizan en múltiples archivos, cada uno conteniendo una o más clases relacionadas.

Por ejemplo:

  • Program.cs: Contiene la clase principal con el método Main
  • Libro.cs: Contiene la clase Libro
  • Usuario.cs: Contiene la clase Usuario

Cada archivo puede tener su propia declaración de using y pertenece al mismo espacio de nombres del proyecto.

Resumen

En este artículo hemos explorado la estructura básica de un programa en C#. Hemos visto que todo programa C# contiene directivas using, espacios de nombres, clases y al menos un método Main que sirve como punto de entrada. También hemos aprendido cómo estos elementos se organizan para formar un programa coherente y funcional.

Esta estructura no es solo una convención, sino que proporciona una organización lógica que facilita el desarrollo y mantenimiento del código. A medida que avances en tu aprendizaje de C#, esta estructura fundamental seguirá siendo la base sobre la que construirás aplicaciones cada vez más complejas y sofisticadas.