Это, прежде всего, используется для описания.NET, потому что это - термин Microsoft, принял решение дифференцировать.NET от C/C++ и других более старых языков. Microsoft выбрала его, потому что это не был термин, который обычно связывался с Java, потому что они не хотели подчеркивать общие черты между C#/.NET и Java (в противоположность вызову его, что-то как 'виртуальная машина кодирует', который заставит его звучать как намного больше Java как). В основном использование "управляемого кода" продает управляемый, а не технически управляемый, терминология.
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 # отслеживает, чтобы найти то, что все помечены.
См. Пост Дэвида М. Кина здесь . Похоже, что это проблема языкового взаимодействия:
Хотя C # радостно позволяет пользователям выполнять битовые операции над перечислениями без FlagsAttribute, Visual Basic этого не делает. Так что если вы выставляете типы на другие языки, то хорошая пометка перечислений с FlagsAttribute - хорошая идея; это также дает понять, что члены перечисления предназначены для совместного использования.
С уважением
Дэвид