Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
20 / 19 / 9
Регистрация: 06.02.2015
Сообщений: 382
1
.NET 4.x

Атрибут [Flags]

28.12.2016, 19:26. Показов 1328. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ребята, объясните, как он работает.

2 вопроса:

-почему и без применения этого атрибута к enum мы можем использовать оператор | при инициализации переменной, перечисляя разные поля этого энума.

-как, по факту, работает этот атрибут и соответственно оператор |
(идея в том что я не пойму, как можно записать в одну переменную с одним типом, 2 разных значения и что бы эти 2 разных значения были равноправны в одной переменной) тут желательно подробно
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.12.2016, 19:26
Ответы с готовыми решениями:

Flags атрибут у перечисления
Подскажите пожалуйста, зачем ставить атрибут Flags у перечислений ? Какое он дает преимущество ? В...

Атрибут в Xml
<Client ID="4"> <Index>1</Index> <Address>Moscow</Address> <Company>Рога...

Наследование и атрибут Description
Здравствуйте, подскажите пожалуйста, можно ли как то настроить интерфейс (наследовать его от какого...

ThreadPool.QueueUserWorkItem и атрибут Synchronization
Разбираюсь с работой пула потоков CLR и не могу понять, почему при атрибуте не срабатывают...

2
Злой няш
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
28.12.2016, 21:30 2
Цитата Сообщение от DarkOrk Посмотреть сообщение
-почему и без применения этого атрибута к enum мы можем использовать оператор | при инициализации переменной, перечисляя разные поля этого энума.
Потому что по умолчанию enum - это int, а к int можно применять побитовое ИЛИ. Впрочем, даже если поменять тип, ничего не изменится.

Цитата Сообщение от DarkOrk Посмотреть сообщение
-как, по факту, работает этот атрибут и соответственно оператор |
Попробуй выполнить этот код с атрибутом и без:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public static void Main()
{
    var a = Test.One;
    var b = Test.Two;
    Console.WriteLine(a | b);
}
 
[Flags]
public enum Test
{
    One = 1,
    Two = 2
}
В теории желательно использовать атрибут, когда над перечислением выполняются побитовые операции. На практике - изменяется только работа метода ToString. Как оно там работает на самом деле - детали реализации CLR.

Резюмируя: разницы почти нет, но желательно атрибут использовать, когда надо выполнять побитовые операции.
1
1150 / 742 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
28.12.2016, 21:49 3
Лучший ответ Сообщение было отмечено DarkOrk как решение

Решение

Цитата Сообщение от DarkOrk Посмотреть сообщение
почему и без применения этого атрибута к enum мы можем использовать оператор |
Для enum'ов доступны битовые операции AND, OR, NOT и XOR. Так как enum, по сути, набор целочисленных констант, то и эти операции работаю как над обычными числами.
Цитата Сообщение от DarkOrk Посмотреть сообщение
как, по факту, работает этот атрибут и соответственно оператор |
Атрибут означает, лишь то, что программист задал элементам перечисления значения равные степеням двойки.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    [Flags]
    enum SomeEnum { First = 1, Second = 2, Third = 4 }
 
    class Program
    {
        static void Main(string[] args)
        {
            var e = SomeEnum.First | SomeEnum.Third;
 
            Console.WriteLine(e.HasFlag(SomeEnum.First)); //True
            Console.WriteLine(e.HasFlag(SomeEnum.Second));//False
            Console.WriteLine(e.HasFlag(SomeEnum.Third)); //True
 
            Console.ReadKey();
        }
Почитайте тут, все подробно расписан https://msdn.microsoft.com/ru-... 38362.aspx
0
28.12.2016, 21:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.12.2016, 21:49
Помогаю со студенческими работами здесь

Один атрибут к нескольким переменным
Можно ли указать один атрибут к нескольким переменным, каждый раз не указывая атрибут? Вот мой...

Поставить на файл атрибут скрытый
Как можно поставить на файл аттрибут "Скрытый"? Например заходишь в свойства файла, и там можно...

Функция как атрибут другой функции
сначала делал так, прога подвисала, приходилось перезаускать, итог один висит: public...

NUnit. Атрибут TestCaseSource. Перечисление в source
Добрый день. Изучаю тестирование. Создан тест, который в качестве параметра принимает массив...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru