Это может быть простой и простой вопрос, но у меня все еще есть небольшая путаница, почему используется побитовая OR
. Предположим, что у меня есть класс A
с четырьмя полями:
class A
{
private int Field1;
private static int Field2;
public int Field3;
public static int Field4;
}
И используйте Reflection
для получения полей:
var fields = typeof (A).GetFields(BindingFlags.Public | BindingFlags.Static);
Если вы новичок с Reflection
и не знаете, как использовать BindingFlags
, начальное логическое мышление в вашей голове будет:
Эта строка выберет все статические или общедоступные поля, потому что используется побитовое ИЛИ. И ожидаемый результат, который вы думаете:
Field2
Field3
Field4
Но при нажатии F5 результат будет совершенно другим, побитовое OR
работает как AND
:
Field4
Почему бы не использовать побитовый оператор И, который мог бы следовать логическому мышлению. например:
var fields = typeof (A).GetFields(BindingFlags.Public & BindingFlags.Static);
Я нашел слова в MSDN:
побитовая операция ИЛИ, используемая для объединения флагов, может считаться передовой концепцией в некоторых случаях, которая не должна требоваться для простых задач.
Пожалуйста, можете ли вы объяснить концепцию аванса здесь простым способом для понимания?