tag returns remarks example c# types

c# - returns - Definición de alias de tipo



summary returns c# (7)

Una característica de Pascal que encontré muy útil fue la capacidad de nombrar un tipo de datos, por ejemplo,

type person: record name: string; age: int; end; var me: person; you: person; etc

¿Puedes hacer algo similar en C #? Quiero poder hacer algo como

using complexList = List<Tuple<int,string,int>>; complexList peopleList; anotherList otherList;

De modo que si tengo que cambiar la definición del tipo de datos, puedo hacerlo en un solo lugar.

¿C # apoya una manera de lograr esto?


¿Qué pasa con la herencia?

class ComplexList : List<Tuple<int, string, int>> {} var complexList = new ComplexList();

Esto parece un concepto similar pero no hay un equivalente directo de un alias basado en el tipo en C #, solo los alias de espacio de nombres .

Si desea evitar que los nombres de tipo entren en conflicto en su código, el aliasing del espacio de nombres es el camino a seguir.

Si desea crear un nuevo tipo que sea "es una" instancia de otro tipo, la herencia es una opción.


Desde la sintaxis que se muestra en la pregunta inicial, parece que en realidad solo estás preguntando cómo crear una clase en C #, y no cómo crear un alias para un tipo.

Si desea que se escriba un nombre más simple que List<Tuple<int,string,int>> , y desea que sea "global" (es decir, no por archivo), crearía una nueva clase que heredó dicha clase y la declaró No hay miembros adicionales. Me gusta esto:

public class MyTrinaryTupleList: List<Tuple<int,string,int>> { }

Eso le da una ubicación única de administración y no es necesario usar declaraciones adicionales.

Sin embargo, también lo llevaría un paso más allá y me atrevería a decir que probablemente no quiera un Tuple, sino otra clase, como:

public class Person { public string Name { get; set; } public int Age { get; set; } public int FavoriteNumber { get; set; } public Person() { } public Person(string name, int age, int favoriteNumber) { this.Name = name; this.Age = age; this.FavoriteNumber = favoriteNumber; } }

Y luego para su tipo de lista puede hacer lo siguiente:

public class PersonList: List<Person> { }

Además, si necesita otras propiedades o métodos de ayuda específicos de la lista, también puede agregarlos a la clase PersonList.


No es exactamente lo que haces en Pascal, pero puedes usar el comando -directive. Echa un vistazo aquí sobre cómo usarlo.

Ejemplo:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using MyList = Dummy2.CompleXList; namespace Dummy2 { public class Person { } public class CompleXList : List<Person> { } class Program { static void Main(string[] args) { MyList l1 = new MyList(); } } }


Puedes crear un tipo:

class ComplexList : List<Tuple<int,string,int>> { }

Esto no es estrictamente lo mismo que un alias, pero en la mayoría de los casos, no debería ver ninguna diferencia.


Sí, puede hacerlo, sin embargo, debe especificar los tipos completos, es decir, la definición se convierte en:

using ComplexList = System.Collections.Generic.List<System.Tuple<int,string,int>>;

Esto se especifica por archivo, al igual que las directivas de uso para espacios de nombres.

nitpick: Convencionalmente, un tipo en .NET es PascalCased.


Sólo un simple uso haría:

using Foo = System.UInt16; public class Test { public Foo Bar { get;set; } }


Si es posible. Puedes escribir:

using System; using System.Collections.Generic; namespace ConsoleApplication12 { using MyAlias = List<Tuple<int, string, int>>; }

o, si se declara fuera del espacio de nombres:

using System; using System.Collections.Generic; using MyAlias = System.Collections.Generic.List<System.Tuple<int, string, int>>; namespace ConsoleApplication12 { }

entonces utilízalo como un tipo:

MyAlias test = new MyAlias();