HOWTO · Csharp

Definir el alias de tipo en C#

Este tutorial enseña cómo definir el alias de tipo en C#.

En esta página

Un alias de tipo de C# le da otro nombre a un tipo existente. No declara un tipo nuevo, no cambia el comportamiento del tipo ni crea una identidad de tipo distinta. Por ejemplo, una variable declarada mediante un alias sigue siendo del tipo al que este apunta. Por eso, el alias resulta útil para mejorar la legibilidad y resolver ambigüedades de nombres, pero no para añadir seguridad de tipos.

El mecanismo integrado es una directiva de alias using. Úsela cuando el nombre de un tipo sea largo o cuando dos tipos importados tengan el mismo nombre. El alias está disponible en el ámbito del código fuente donde se declara; no se comparte automáticamente entre proyectos. Si necesita un tipo distinto, con comportamiento o identidad propios, la herencia o un wrapper pueden ser opciones más adecuadas.

Qué hace un alias de tipo de C#

Un alias es un nombre a nivel de código fuente para un tipo o un espacio de nombres. No envuelve valores, no crea una subclase ni hace accesibles los miembros que de otro modo no lo serían. El compilador resuelve el alias al tipo de destino, por lo que las API que aceptan ese tipo también aceptan los valores a los que se hace referencia mediante el alias.

Esta distinción importa al elegir un diseño. Use un alias para acortar referencias o dejar claro cuál es el tipo de destino. Si el programa necesita un concepto distinto, con comportamiento, validación o contrato de API propios, declare un tipo por separado.

Crear un alias de tipo con una directiva using

Coloque una directiva de alias using antes de las declaraciones que la utilizan, por ejemplo: using Writer = System.IO.StringWriter;. Después, use Writer en lugar del nombre completo del tipo. La directiva se aplica al ámbito de la unidad de compilación o del espacio de nombres en el que se declara; no crea un nombre disponible para todo el proyecto. Un alias local también permite distinguir explícitamente dos nombres de tipo que, de otro modo, resultarían ambiguos, sin importar todos los nombres de sus espacios de nombres.

Ejecute este ejemplo:

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

using System;
using Writer = System.IO.StringWriter;

class Program
{
    static void Main()
    {
        using (Writer writer = new Writer())
        {
            writer.Write("Alias target: ");
            writer.Write(typeof(Writer).Name);
            Console.WriteLine(writer.ToString());
        }
    }
}

El alias solo es una forma abreviada de escribir el nombre: typeof(Writer) hace referencia a System.IO.StringWriter. La palabra clave using también aparece en instrucciones de administración de recursos, como el bloque using anterior; esa construcción independiente libera el escritor cuando el flujo de control sale del bloque.

Crear un alias de espacio de nombres con una directiva using

Un alias de espacio de nombres usa la misma forma, pero con un espacio de nombres como destino: using Drawing = System.Drawing;. Entonces, el código puede hacer referencia a un tipo como Drawing.Point cuando ese espacio de nombres y ese tipo están disponibles. La palabra clave namespace declara un espacio de nombres; por sí sola, no crea un alias.

Una importación normal de espacio de nombres, como using System;, permite buscar los nombres de ese espacio de nombres, pero no importa automáticamente los espacios de nombres anidados. Un alias de espacio de nombres solo acorta un nombre. No cambia las reglas de acceso ni concede acceso a miembros privados.

Usar la herencia cuando necesite un tipo distinto

La herencia declara un tipo nuevo basado en otro existente. Por ejemplo, class NamedList : System.Collections.Generic.List<string> { } declara NamedList, una clase distinta que puede usarse como una lista de cadenas. A diferencia de un alias, tiene su propia identidad de tipo declarada y se le pueden añadir miembros u otro comportamiento.

Elija la herencia solo cuando el tipo derivado sea un subtipo significativo y se permita derivar del tipo base. No se puede heredar de una clase sellada ni de un tipo por valor como int. Además, la herencia establece una relación con la clase base que un alias no tiene. Para abreviar un nombre, use un alias; para representar un concepto distinto del dominio, considere un tipo derivado o un wrapper diseñado para el comportamiento que ese concepto necesita.

Evaluar paquetes de terceros para tipos wrapper

Un paquete de terceros puede proporcionar abstracciones auxiliares para envolver tipos o asignarles nombres, pero esa funcionalidad pertenece al paquete; no es un alias de tipo de C# integrado. Antes de añadirlo, evalúe su documentación, mantenimiento, compatibilidad, licencia y API. Compruebe si crea un tipo wrapper distinto, qué conversiones u operaciones admite y si esa semántica encaja con el código.

Un paquete añade una dependencia que quizá haya que restaurar y mantener para los usuarios del proyecto. No añada uno solo para acortar el nombre de un tipo: un alias using ya resuelve esa necesidad sin cambiar la identidad del tipo. Considere un paquete únicamente cuando sus capacidades verificadas resuelvan una necesidad de diseño más amplia que un alias simple no pueda cubrir.