Potrebbe essere una domanda facile e semplice ma ho ancora un po 'di confusione il motivo per cui si decide di usare bit per bit OR
. Si supponga Ho una classe A
con quattro campi:Perché l'operatore OR bit a bit viene utilizzato in flag enum con il significato AND
class A
{
private int Field1;
private static int Field2;
public int Field3;
public static int Field4;
}
E utilizzare Reflection
per ottenere i campi:
var fields = typeof (A).GetFields(BindingFlags.Public | BindingFlags.Static);
Se siete newbie con Reflection
e non so il modo come utilizzare BindingFlags
, il la logica iniziale nella tua testa sarebbe:
Questa riga selezionerà tutti i campi pubblici O statici perché OR bit a bit viene utilizzato. E l'atteso risultato si pensa:
Field2
Field3
Field4
Ma quando colpisce F5, il risultato sarà totalmente diverso, bit per bit OR
opere come AND
:
Field4
perché non utilizzare AND bit a bit operatore che potrebbero seguire con la pensiero logico. in questo modo:
var fields = typeof (A).GetFields(BindingFlags.Public & BindingFlags.Static);
ho trovato parole MSDN:
l'operazione OR bit a bit utilizzato per combinare le bandiere potrebbe essere considerato un concetto avanzato in alcune circostanze che non dovrebbe essere richiesto per compiti semplici.
Si prega chiunque potrebbe spiegare il concetto anticipo qui in modo semplice per la comprensione?
'OR' sembra essere il concetto giusto quando si considera la differenza tra OR inclusivo ed esclusivo. In questo caso il 'OR' è inclusivo, lo stesso che dire" prendi alcuni oggetti dal negozio che contengono uova o prosciutto ". È diverso dal dire "che contengono uova e prosciutto". –
in [MSDN] (http://msdn.microsoft.com/en-us/library/6ztex2dc.aspx) si legge: È necessario specificare BindingFlags.Instance ** o ** BindingFlags.Static per ottenere un ritorno . Quindi potrebbe non essere possibile elencare istanze ** e ** statiche contemporaneamente ... ?? – tschmit007
@ tschmit007: che cosa ha a che fare con la domanda? –