Declaración de tipo

En términos generales, si analizamos lenguajes como C, C++ y C#, notarás esta característica:

  • Un programa en C es un conjunto de funciones y tipos de datos
  • Un programa en C++ es un conjunto de funciones y clases
  • Sin embargo, la esencia de un programa C# consiste en un conjunto de declaraciones de tipos

El código fuente de cualquier archivo ejecutable de C# (EXE) o biblioteca de enlace dinámico (DLL) está formado por una o varias declaraciones de tipos.

Los archivos DLL no tienen punto de entrada Main; mientras que un ejecutable (EXE) debe declarar al menos una clase que contenga un método llamado Main, el punto de arranque del programa.

Un software de gran tamaño puede albergar miles de tipos (clases, etc.) en su código fuente. Los proyectos grandes suelen ser desarrollados por varios programadores, cada uno encargado de módulos distintos, por lo que es casi inevitable que aparezcan tipos con nombres iguales. ¿Cómo evitamos conflictos de nombres? Aquí entran en juego los «espacios de nombres» que comentamos antes.

El espacio de nombres (namespace) sirve para agrupar declaraciones de tipos relacionadas y asignar un identificador común a todo ese grupo. Como cualquier programa es básicamente una colección de tipos interconectados, los desarrolladores suelen crear espacios de nombres personalizados para albergar todos los tipos del proyecto.

En resumen, un espacio de nombres añade una etiqueta de grupo a un conjunto de clases. Si otro fragmento de código quiere acceder a esas clases, debe incluir dicha etiqueta de grupo.

Imagina una clase con dos alumnos que comparten el mismo nombre completo. Los profesores y compañeros no pueden diferenciarlos solo por su nombre, así que añaden una referencia de grupo: por ejemplo, Tom del Grupo A y Tom del Grupo B. Las etiquetas A y B cumplen la misma función que los espacios de nombres.

El código que verás a continuación muestra un programa con tres declaraciones de tipos, todos definidos dentro de un espacio de nombres llamado MyProgram.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HelloDemo // Declarar un espacio de nombres
{

    class A                  // Declarar el tipo A (clase)
    {
        void Fun1() // Función
        {
            // Lógica del programa
        }
    }

    class B                  // Declarar el tipo B (clase)
    {
        void Fun1() // Función
        {
            // Lógica del programa
        }
    }

    class C                  // Declarar el tipo C (clase)
    {
        static void Main(string[] args) // Punto de entrada Main del programa
        {
            double pi = 3.14;
            string webSite = "foxdevelop.com";
            Console.WriteLine($"The Pi is {pi} and the website is {webSite}.");
        }
    }

}
Lenguaje del código: PHP (php)

Profundizaremos en los espacios de nombres en las próximas lecciones.

El tipo es una plantilla

Dado que un programa C# es esencialmente un conjunto de declaraciones de tipos, aprender C# consiste en dominar la creación y el uso de tipos. Lo primero que debemos comprender es:

Qué es un Tipo (Type)

Puedes entender un tipo como una plantilla para crear estructuras de datos: no es una estructura de datos concreta en sí misma, pero define todas las propiedades que tendrán los objetos generados a partir de esta plantilla.

Un tipo no es más que un «plano de diseño» que no consume memoria por sí solo; solo se asigna memoria y se almacenan datos cuando se instancia.

El tipo es un plano para generar objetos reales. Es similar al plano de una casa: con un único plano se pueden construir muchas viviendas independientes.

Cada tipo se define mediante tres elementos:

  1. Nombre
  2. Estructura para almacenar los datos de sus miembros
  3. Comportamientos y restricciones

En C# todo es un tipo, incluidos los tipos primitivos integrados.

Aquí tienes dos ejemplos de tipos integrados: short e int.

Su estructura es la siguiente:

Tipo shortTipo int
Nombre: shortNombre: int
Estructura: ocupa 2 bytesEstructura: ocupa 4 bytes
Comportamiento: entero de 16 bitsComportamiento: entero de 32 bits
  • Nombre: identificador único del tipo (int/string/nombres de clases personalizadas)
  • Estructura de almacenamiento: define el tamaño de memoria y la disposición de campos (ej: short ocupa siempre 2 bytes)
  • Restricciones de comportamiento: especifica operaciones válidas, rango de valores y métodos nativos (ej: int soporta operaciones aritméticas, rango de valores -2^31 ~ 2^31-1)

Instanciación (Instantiate)

Crear un objeto de datos utilizable a partir de una plantilla de tipo con la palabra reservada new

Objeto (object) = Instancia (instance)

Tomemos como ejemplo los tipos int y short vistos antes: podemos generar instancias a partir de ellos. En el código inferior, pi, age y nums son instancias creadas a partir de los tipos double, int y short respectivamente.

namespace HelloDemo 
{

    class Program
    {
        static void Main(string[] args)
        {
            double pi = 3.14;
            int age = 12;
            short nums = 23;
        }
    }

}Lenguaje del código: JavaScript (javascript)

En C#, todas las variables y datos del programa son, sin excepción, instancias de algún tipo; no existen datos sin tipo asociado.

Consulta el ejemplo anterior

La clase C del ejemplo es la clase de punto de entrada y cumple todos los requisitos de un archivo ejecutable:

  • Es un tipo personalizado contenido en el espacio de nombres MyProgram
  • Contiene el método estático sin retorno Main, que funciona como punto de inicio de la aplicación

En C# no solo existe el tipo class

Todos los tipos declarables en C#: Clase (class), Estructura (struct), Interfaz (interface), Enumeración (enum), Delegado (delegate), Registro (record)

BCL (Base Class Library): Biblioteca de clases estándar integrada de .NET, que proporciona tipos predefinidos del sistema como int, short, string, List<T>, los cuales el desarrollador puede instanciar y usar directamente.

Declaración de tipo

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *