Ответ 1
Обычно это побитовый или оператор. В этом контексте он используется для перечисления с атрибутом flags.
Просто интересно, что в этом означает труба? ive никогда не видел этого раньше:
FileSystemAccessRule fullPermissions = new FileSystemAccessRule(
"Network Service",
FileSystemRights.FullControl | FileSystemRights.Modify,
AccessControlType.Allow);
Приветствия
Обычно это побитовый или оператор. В этом контексте он используется для перечисления с атрибутом flags.
Для перечисления, отмеченного атрибутом [Flags], вертикальная полоса означает "и", т.е. добавляет заданные значения вместе.
Изменить: это поразрядный или "(хотя и семантически" и "), например:
[Flags]
public enum Days
{
Sunday = 0x01,
Monday = 0x02,
Tuesday = 0x04,
Wednesday = 0x08,
Thursday = 0x10,
Friday = 0x20,
Saturday = 0x40,
}
// equals = 2 + 4 + 8 + 16 + 32 = 62
Days weekdays = Days.Monday | Days.Tuesday | Days.Wednesday | Days.Thursday | Days.Friday;
Это побитовое ИЛИ, но семантически вы думаете об этом как AND!
Это побитовое ИЛИ двух значений, предположительно оно создает FileAccessRule с установленными разрешениями FullAccess и Modify.
Это двоичный оператор:
Двоичный | операторы предопределены для интегральные типы и bool. Для интегральные типы, | вычисляет поразрядное ИЛИ его операндов. Для операндов bool, | вычисляет логический ИЛИ его операнды; то есть результат ложный тогда и только тогда, когда оба операнда ложь.
Я предполагаю, что вы имеете в виду это: FileSystemRights.FullControl | FileSystemRights.Modify
Этот FileSystemRights, представляет собой перечисление с FullControl и Modify, имеющее свои собственные числовые значения.
Итак, если FullControl = 1 и Modify = 2,
FileSystemRights.FullControl | FileSystemRights.Modify = 3.
00000001 | 00000010 = 00000011.
Каждый бит является "флагом" для этого метода. Вход проверяет, какой флаг установлен и что делать.
Итак, в этом примере позиция 1 (в этом случае цифра полностью справа) - это FullControl, а позиция 2 - Modify. Метод рассматривает каждую из позиций и изменяет ее поведение. Использование флагов - это способ передачи нескольких параметров поведения без необходимости создания параметра для каждой возможности (например, bool allowFullControl, bool allowModify) и т.д.
Это логическое или. FullControl и Modify представляют биты в маске. Например, 0001 и 0101. Если вы объедините их через трубу, вы получите 0101.