C # / Методы в пространстве имен

Допустим, у меня есть перечисление ExitCodes, Я также хочу иметь метод с именем ErrorCodes.Quit, В C ++ вы можете поместить методы в пространство имен, а в C # — нет. Таким образом, вы можете иметь как enum, так и метод в пространстве имен ExitCodes в C ++, но в C # вы ограничены. Я хотел задать два вопроса об этих различиях.

  1. Есть ли обходной путь для этого в C #? Можно ли как-нибудь добиться того же? Я знаю, что мог бы сделать класс нестатичным, сделать конструктор закрытым, а затем сгладить статические экземпляры ExitCodes со значениями и статическим методом Quit, но это слишком много работы.

  2. Я хочу иметь возможность создавать пользовательские типы, как это происходит в C ++. Например, в C ++ я могу сделать:

    using exit_code_t = int;
    

Я сомневаюсь, что это возможно в C #, но почему бы не спросить здесь.

-1

Решение

Есть ли обходной путь для этого в 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 но это так близко, как вы собираетесь получить.

2

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector