83 votes

Définition des alias de type

Une fonctionnalité de Pascal que j'ai trouvée très utile était la possibilité de nommer un type de données, par exemple

 type
 person: record
             name: string;
             age: int;
         end;

var
 me: person;
 you: person;

etc

Pouvez-vous faire quelque chose de similaire en C# ? Je veux pouvoir faire quelque chose comme

 using complexList = List<Tuple<int,string,int>>;

complexList peopleList;
anotherList otherList;

Ainsi, si je dois modifier la définition du type de données, je peux le faire à un seul endroit.

C# prend-il en charge un moyen d'y parvenir ?

98voto

ken2k Points 24640

Oui c'est possible. Tu peux écrire:

 using System;
using System.Collections.Generic;

namespace ConsoleApplication12
{
    using MyAlias = List<Tuple<int, string, int>>;
}

ou, si déclaré en dehors de l'espace de noms :

 using System;
using System.Collections.Generic;

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

namespace ConsoleApplication12
{
}

puis utilisez-le comme type :

 MyAlias test = new MyAlias();

66voto

Mithrandir Points 10545

Ce n'est pas exactement ce que vous faites en Pascal, mais vous pouvez utiliser la directive using Regardez ici comment l'utiliser

Exemple:

 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();
        }
    }
}

18voto

Vous pouvez créer un type :

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

Ce n'est pas strictement la même chose qu'un alias mais dans la plupart des cas, vous ne devriez pas voir de différences.

14voto

Jodrell Points 14205

Qu'en est-il de l'héritage ?

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

var complexList = new ComplexList();

Cela semble être un concept similaire, mais il n'y a pas d'équivalent direct d'un alias basé sur le type en C#, seulement des alias d'espace de noms .

Si vous voulez éviter les conflits de nom de type dans votre code, l'alias d'espace de noms est la solution.

Si vous voulez créer un nouveau type qui "est une" instance d'un autre type, l'héritage est une option.

5voto

flq Points 11937

Oui, vous pouvez le faire, mais vous devez spécifier les types complets, c'est-à-dire que la définition devient :

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

Ceci est spécifié par fichier, tout comme les directives using pour les espaces de noms.

nitpick : Par convention, un type dans .NET est PascalCased.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X