Подтвердить что ты не робот

Определение псевдонимов типов

Одной из особенностей Pascal, которую я нашел очень полезной, была возможность назвать тип данных, например

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

var
 me: person;
 you: person;

etc

Можете ли вы сделать что-то подобное в С#? Я хочу иметь возможность сделать что-то вроде

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

complexList peopleList;
anotherList otherList;

Итак, если мне нужно изменить определение типа данных, я могу сделать это в одном месте.

Поддерживает ли С# способ достижения этого?

4b9b3361

Ответ 1

Не в порядке, что вы делаете в Pascal, но вы можете использовать using -directive. Посмотрите здесь на как его использовать

Пример:

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

Ответ 2

Да, это возможно. Вы можете написать:

using System;
using System.Collections.Generic;

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

или, если объявлено вне пространства имен:

using System;
using System.Collections.Generic;

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

namespace ConsoleApplication12
{
}

затем используйте его как тип:

MyAlias test = new MyAlias();

Ответ 3

Вы можете создать тип:

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

Это не то же самое, что и псевдоним, но в большинстве случаев вы не должны видеть различий.

Ответ 4

Как насчет наследования?

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

var complexList = new ComplexList();

Это похоже на аналогичную концепцию (с преимуществами).

Ответ 5

Из синтаксиса, показанного в начальном вопросе, похоже, что вы действительно просто спрашиваете, как сделать класс на С#, а не как псевдоним типа.

Если вы хотите, чтобы более простое имя было напечатано, чем List<Tuple<int,string,int>>, и вы хотите, чтобы оно было "глобальным" (т.е. не для файла), я бы создал новый класс, унаследовавший указанный класс, и не объявлял никаких дополнительных членов. Вот так:

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

Это дает одно место управления, и нет необходимости в дополнительных операциях использования.

Однако я бы также сделал еще один шаг вперед и рискну, что вы, вероятно, не хотите Tuple, а скорее другой класс, например:

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

И затем для вашего типа списка вы можете сделать следующее:

public class PersonList: List<Person> { }

Кроме того, если вам нужны другие вспомогательные свойства или методы другого списка, вы также можете добавить их в класс PersonList.

Ответ 6

Да, вы можете это сделать, однако вам нужно указать полные типы, т.е. определение будет выглядеть следующим образом:

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

Это указано для каждого файла, как и директивы using для пространств имен.

nitpick: Обычно тип .NET является PascalCased.

Ответ 7

Простое использование:

using Foo = System.UInt16;

public class Test {
  public Foo Bar { get;set; }
}