What Does the [Flags] Attribute Really Do?

Это, прежде всего, используется для описания.NET, потому что это - термин Microsoft, принял решение дифференцировать.NET от C/C++ и других более старых языков. Microsoft выбрала его, потому что это не был термин, который обычно связывался с Java, потому что они не хотели подчеркивать общие черты между C#/.NET и Java (в противоположность вызову его, что-то как 'виртуальная машина кодирует', который заставит его звучать как намного больше Java как). В основном использование "управляемого кода" продает управляемый, а не технически управляемый, терминология.

28
задан Mehrdad 5 May 2011 в 19:41
поделиться

2 ответа

Flags дает возможность использовать enum для нескольких значений.

Рассмотрим ситуацию, когда вы хотите использовать флажки для другой ситуации, но не хотите создавать разные столбцы в базе данных. Если у вас есть 20 флажков, вам нужно будет создать 20 столбцов в базе данных с помощью bool. Но с флагами вы можете создать один столбец и использовать это значение для хранения в столбце. Запустите этот пример в консоли, чтобы лучше понять его.

class Program
{
    static void Main(string[] args)
    {
        //Set the features that you require for car. Consider it as checked in the UI.
        CarFeatures carFeatures = CarFeatures.AC | CarFeatures.Autopilot| CarFeatures.Sunroof;

        //Do the backend logic
        if (carFeatures.HasFlag(CarFeatures.Autopilot))
        {
            //Show Autopilot cars
        }
        //See the what carfeatures are required
        Console.WriteLine(carFeatures);
        //See the integer value of the carfeatures
        Console.WriteLine((int)carFeatures);
        Console.ReadLine();
    }
}

[Flags]
public enum CarFeatures
{
    AC=1,
    HeatedSeats= 2,
    Sunroof= 4,
    Autopilot= 8,
}

Различная комбинация всегда дает вам уникальный номер, который c # отслеживает, чтобы найти то, что все помечены.

0
ответ дан 28 November 2019 в 03:04
поделиться

См. Пост Дэвида М. Кина здесь . Похоже, что это проблема языкового взаимодействия:

Хотя C # радостно позволяет пользователям выполнять битовые операции над перечислениями без FlagsAttribute, Visual Basic этого не делает. Так что если вы выставляете типы на другие языки, то хорошая пометка перечислений с FlagsAttribute - хорошая идея; это также дает понять, что члены перечисления предназначены для совместного использования.

С уважением

Дэвид

16
ответ дан 28 November 2019 в 03:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: