簡単で簡単な質問かもしれませんが、ビット単位でOR
が使用される理由は少し混乱しています。私は四つのフィールドを持つクラスA
があるとします。意味があるフラグ列挙型でビット単位のOR演算子が使用されています
class A
{
private int Field1;
private static int Field2;
public int Field3;
public static int Field4;
}
とフィールドを取得するためにReflection
を使用:あなたはReflection
と初心者であり、BindingFlags
を使用するための仕方がわからない場合は
var fields = typeof (A).GetFields(BindingFlags.Public | BindingFlags.Static);
を、
この行は、ビット単位のORが使用されるため、すべてのスタティックORパブリックフィールドを選択します。そして、期待と思う結果:
Field2
Field3
Field4
しかし、F5キーを押すとき、結果はビットごとAND
としてOR
作品、全く異なるものになります:
Field4
はなぜビット単位のAND演算子を使用しないで続くかもしれません論理思考。このように:
var fields = typeof (A).GetFields(BindingFlags.Public & BindingFlags.Static);
私はMSDNに言葉が見つかりました:
フラグを結合するために使用されるビット単位のOR演算を単純なタスクのために要求されるべきではない、いくつかの状況では、高度な概念と考えられるかもしれません。
ここではアドバンスコンセプトを簡単に説明することができますか?
包括的排他的論理和の違いを考慮すると、ここでは「OR」が正しい概念であるようです。この場合、「OR」は包括的であり、「卵またはハムを含む店からいくつかのアイテムを拾う」と同じである。それは「卵とハムを含んでいる」と違う。 –
[MSDN](http://msdn.microsoft.com/en-us/library/6ztex2dc.aspx)を参照してください。戻り値を取得するには、BindingFlags.Instance **または** BindingFlags.Staticのいずれかを指定する必要があります。だから、インスタンス**と**静的を同時に列挙できないかもしれません...? – tschmit007
@ tschmit007:それは質問と何が関係していますか? –