Надеюсь, я пропустил это в документах. Есть ли способ объявить синоним типа в С#?
Объявление синонима типа в С#
Ответ 1
Вы можете использовать оператор using для создания псевдонима для типа.
Например, следующее будет создавать псевдоним для System.Int32
, называемый MyInt
using MyInt = System.Int32;
В качестве альтернативы вы можете использовать наследование, чтобы помочь в некоторых случаях. Например
Создайте тип People
, который является List<Person>
public class People: List<Person>
{
}
Не совсем псевдоним, но он упрощает работу, особенно для более сложных типов, таких как
public class SomeStructure : List<Dictionary<string, List<Person>>>
{
}
И теперь вы можете использовать тип SomeStructure
, а не это универсальное объявление.
В примере, который у вас есть в ваших комментариях, для Tuple
вы можете сделать что-то вроде следующего.
public class MyTuple : Tuple<int, string>
{
public MyTuple(int i, string s) :
base(i, s)
{
}
}
Ответ 2
Возможно, вы ищете Использование Alias Directives:
using MyType = MyNamespace.SomeType;
Это позволяет в вашем коде ввести:
// Constructs a MyNamespace.SomeType instance...
MyType instance = new MyType();
Ответ 3
Есть ли способ объявить синоним типа в С#?
Нет.
Вы можете создать псевдоним с использованием, но ограниченным 1 файлом (пространство имен).
Ответ 4
Похоже, вы говорите об псевдониме, который вы можете объявить в своих операторах using
в верхней части ваших кодовых файлов:
using MyDate = System.DateTime;
Ответ 5
Это не самый простой способ решить эту проблему, но когда мне нужен синоним типа, я создаю класс с неявными преобразованиями в целевой тип и из него, например:
Данное имя должно быть синонимом строки, Затем вы можете сделать следующее:
public class Name
{
public string Value;
public static implicit operator string(Name name) { return name.Value; }
public static implicit operator Name(string name) { return new Name {Value = name}; }
}
Что даст вам возможность использовать тип имени вокруг вашего кода, и компилятор позволит вам назначать ему значения также из строки.
Если у вас есть следующая подпись метода:
public void SomeMethodThatNeedsName(Name name)
Вы можете сделать это:
SomeMethodThatNeedsName("aNameThatComesFromString")