Допустим, у меня есть перечисление ExitCodes
, Я также хочу иметь метод с именем ErrorCodes.Quit
, В C ++ вы можете поместить методы в пространство имен, а в C # — нет. Таким образом, вы можете иметь как enum, так и метод в пространстве имен ExitCodes
в C ++, но в C # вы ограничены. Я хотел задать два вопроса об этих различиях.
Есть ли обходной путь для этого в C #? Можно ли как-нибудь добиться того же? Я знаю, что мог бы сделать класс нестатичным, сделать конструктор закрытым, а затем сгладить статические экземпляры ExitCodes со значениями и статическим методом Quit, но это слишком много работы.
Я хочу иметь возможность создавать пользовательские типы, как это происходит в C ++. Например, в C ++ я могу сделать:
using exit_code_t = int;
Я сомневаюсь, что это возможно в C #, но почему бы не спросить здесь.
Есть ли обходной путь для этого в C #?
Да, поместите метод (и Enum, если хотите) в класс вместо пространства имен. Синтаксически это будет выглядеть так же:
public class ExitCodes
{
public enum ExitCodes
{
...
}public static void Quit()
{
...
}
}
Теперь вы можете использовать ExitCodes.ExitCodes
а также ExitCodes.Quit()
;
Я хочу иметь возможность создавать пользовательские типы, как это в C ++
В C ++ это просто дает псевдоним к int
тип. Вы можете сделать то же самое в C #, но вы должны использовать фактическое имя типа, а не int
ключевое слово:
using System;
using MyInt = System.Int32;
public class Test
{
public static void Main()
{
// your code goes here
Console.WriteLine(typeof(MyInt).ToString()); // will print System.Int32
}
}
Одно из отличий в C # заключается в том, что псевдоним применяется только к текущий файл. Так что не именно так так же, как псевдоним C ++ /typedef
но это так близко, как вы собираетесь получить.