Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/30: Рейтинг темы: голосов - 30, средняя оценка - 4.73
13 / 1 / 0
Регистрация: 25.03.2013
Сообщений: 281
1

Почему перечисления enum объявляются в пространстве имен а не, например, в классе?

26.03.2013, 14:50. Показов 5720. Ответов 8
Метки нет (Все метки)

Совсем недавно взялся я усиленно за C# и остановился на перечислениях. Почему они объявляются в пространстве имен а не например в классе? Почему когда я объявляю перечисления например:
C#
1
enum Days {Sat = 1, Sun = 2, Mon = 3};
и хочу вывести ее на экран, отображаются например "Sat" а не "1"?
И для чего они вообще нужны?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2013, 14:50
Ответы с готовыми решениями:

enum - объявление перечисления в пространстве имен
Вечер добрый. Столкнулся с такой вот проблемой... На ночь глядя... Модуль_1.h namespace Visit...

Почему перечисления объявляются
Не могу понять почему перечисления(enum) объявляться до метода Main(), Если я объявлю в методе...

Имя типа или пространство имён sess отсутствуют в классе или в пространстве имён user
Привет Написана страничка User в ней: namespace user { public class user :System.tralala {...

Функция в классе, находившемся в пространстве имен
Добрый день. Есть такой код в файлах: 1. Buffer.h:#pragma once #ifndef _BUFFER_H_ #define...

8
20 / 17 / 0
Регистрация: 15.08.2012
Сообщений: 122
26.03.2013, 15:16 2
Noob32, Enum очень удобен для контролирования функций программы, где с помощью него можно легко управлять той или иной задачей. К примеру: "игра", "пауза", "победа", "поражение" - вот эти значения легко контролировать через Enum. А хотя и не обязательно использовать Enum в определенных задачах, это всё зависит от самого программиста. Есть люди, которые контролируют все функции программы с помощью флагов: "int flag = 0". Решайте сами, где его использовать...
1
58 / 58 / 9
Регистрация: 09.01.2013
Сообщений: 247
26.03.2013, 15:39 3
Цитата Сообщение от Noob32 Посмотреть сообщение
Совсем недавно взялся я усиленно за C# и остановился на перечислениях. Почему они объявляются в пространстве имен а не например в классе? Почему когда я объявляю перечисления например:
C#
1
enum Days {Sat = 1, Sun = 2, Mon = 3};
и хочу вывести ее на экран, отображаются например "Sat" а не "1"?
И для чего они вообще нужны?
Перечисления содержат различные состояния. Сами перечисления можно создавать как в пространстве имен, так и в классе, а вот переменные только в классе:
C#
1
2
3
4
5
6
7
8
9
10
11
12
enum MyEnum
{
    State1,
    State2,
    State3
}
 
class MyClass
{
    private MyEnum state = MyEnum.State1;
...
}
Теперь объясню что такое State = 1.
Эта фишка позволяет представлять одно из состояний перечисления в качестве значения int (ну или в формате любого другого численного значения):

C#
1
int SelectedState = (int)state; //state переменная сверху
Но в таком случае перечисление должно иметь следующий вид:

C#
1
2
3
4
5
6
enum MyEnum : int
{
    State1 = 1,
    State2 = 2,
    State3 = 3
}
1
57 / 56 / 17
Регистрация: 28.07.2009
Сообщений: 201
26.03.2013, 15:40 4
Перечисление можно объявлять и внутри класса. Доступ к ним будет примерно так MyClass.MyEnum
перечисление - самостоятельный тип данных, поэтому при выводе на экран отображаются названия констант (Sat, Sun и тд), так же перечисление имеет привязку к типу данных, по умолчанию (в вашей записи) это тип int. чтоб получить значение надо привести к нужному типу.
в вашем перечислении это будет выглядеть так
C#
1
2
3
4
Days day  = Days.Sun;
int enumvalue = (int)Sun;
// и обратное действие
day = (Days)enumvalue;
1
52 / 45 / 4
Регистрация: 07.10.2010
Сообщений: 95
26.03.2013, 18:07 5
Цитата Сообщение от Noob32 Посмотреть сообщение
отображаются например "Sat" а не "1"?
У enum есть несколько перегрузок метода toString
-toString("G") - выведет имя елемента
-toString("D") - выведет цифровое значение елемента.

2CSharpCraft
C#
1
2
3
4
5
6
enum MyEnum
{
    State1,
    State2,
    State3
}
и

C#
1
2
3
4
5
6
enum MyEnum : int
{
    State1 = 1,
    State2 = 2,
    State3 = 3
}
это одно и то же. По умолчанию - тип enuma int и нумерация начинается с 0.

Упс. Все же первое и второе не одно и тоже. Если нужно начало нумерации с 1- придется все описывать.
1
58 / 58 / 9
Регистрация: 09.01.2013
Сообщений: 247
26.03.2013, 18:20 6
serefa

это всего лишь переопределение стандартной нумерации
1
1 / 1 / 0
Регистрация: 12.02.2014
Сообщений: 11
02.09.2014, 14:55 7
C#
1
2
3
4
5
6
enum MyEnum : int
{
    State1 = 1,
    State2 = 2,
    State3 = 3
}
Не обязательно указывать значение каждому элементу, достаточно определить первый элемент как State = 1, а остальные будут пронумерованы инкрементально
0
8 / 8 / 6
Регистрация: 14.06.2013
Сообщений: 65
02.09.2014, 15:25 8
советую почитать на эту тему либо msdn либо Троелсона (5-е издание). Вот пару ссылок на ютуб,
Кликните здесь для просмотра всего текста

0
1112 / 920 / 235
Регистрация: 15.06.2012
Сообщений: 3,613
Записей в блоге: 1
02.09.2014, 15:32 9
Лол, навалили куча инфы. =)

Цитата Сообщение от Noob32 Посмотреть сообщение
Почему они объявляются в пространстве имен а не например в классе?
Какже это вы "усиленно занимаетесь", а в msdn и не заглянули.
Обычно лучше всего определять перечисление прямо в пространстве имен, чтобы всем классам в пространстве имен было одинаково удобно получить к нему доступ. Однако перечисление также может быть вложено в классе или структуре.
Цитата Сообщение от Noob32 Посмотреть сообщение
хочу вывести ее на экран, отображаются например "Sat" а не "1"?
Так задумали разработчики платформы.

Цитата Сообщение от Noob32 Посмотреть сообщение
И для чего они вообще нужны?
Применяют их для следующего: когда есть конечный не большой набор неких значений, которые может принимать переменная. В отличие от int имеет такие приемущества как:
- удобно. Когда видешь запись плана Set(Status.Start) сразу понимаешь что систему привели в старт, а не ишешь по справочнику значение (плюс для каждого значения можно задать описание-подсказку через комментарии).
- валидация. Используя void Set(Status status) {} вместо void Set(int status) {} мы уже явно вводим ограничение на валидность передаваемого значения.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.09.2014, 15:32

Перечисления enum
Доброго времени суток! Помогите пожалуйста с задачей. Нужно написать программу, которая с...

Перечисления enum
как найти количество стран, имеющих морские порты

Имя типа или пространства имен отсутствует в пространстве имен
Подскажите решение проблемы. Целиком код:

Имя типа или пространства имен отсутствует в пространстве имён
Доброго времени суток. Делаю пример SportsStore из книги "ASP.NET MVC 3 Framework с примерами на...

Размер перечисления enum
Добрый день. Где-то я вычитал, что размер перечисления не всегда может быть одинаковый. Из чего...

Вывести текст перечисления Enum
Такой вопрос. Есть такое enum chislo { Один, Два, Три} Как теперь вызвать слово "Два"? то есть я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.