Nó có thể là một câu hỏi dễ dàng và đơn giản nhưng tôi vẫn còn có một chút nhầm lẫn lý do tại sao bitwise OR
được quyết định sử dụng. Giả sử tôi có một lớp A
với bốn lĩnh vực:Tại sao bitwise OR toán tử được sử dụng trong cờ enum với ý nghĩa VÀ
class A
{
private int Field1;
private static int Field2;
public int Field3;
public static int Field4;
}
Và sử dụng Reflection
để có được các lĩnh vực:
var fields = typeof (A).GetFields(BindingFlags.Public | BindingFlags.Static);
Nếu bạn là newbie với Reflection
và không biết cách làm thế nào để sử dụng BindingFlags
, các suy nghĩ logic ban đầu trong đầu của bạn sẽ là:
Dòng này sẽ chọn tất cả các trường công khai OR tĩnh vì bitwise OR được sử dụng. Và dự kiến kết quả mà bạn nghĩ:
Field2
Field3
Field4
Nhưng khi nhấn F5, kết quả sẽ hoàn toàn khác nhau, Bitwise OR
công trình như AND
:
Field4
Tại sao không sử dụng phép toán AND điều hành mà có thể làm theo với suy nghĩ logic. như thế này:
var fields = typeof (A).GetFields(BindingFlags.Public & BindingFlags.Static);
tôi thấy từ trong MSDN:
các Bitwise OR dùng để kết hợp những lá cờ có thể được coi là một khái niệm tiên tiến trong một số trường hợp không nên được yêu cầu cho các nhiệm vụ đơn giản.
Bất cứ ai có thể giải thích khái niệm trước trước ở đây theo cách đơn giản để hiểu?
'OR' có vẻ là khái niệm đúng ở đây khi bạn xem xét sự khác biệt giữa OR bao gồm và độc quyền. Trong trường hợp này, 'OR' được bao gồm, giống như nói" nhặt cho tôi một số vật phẩm từ cửa hàng chứa trứng hoặc giăm bông ". Đó là khác với nói "có chứa trứng VÀ ham". –
trong [MSDN] (http://msdn.microsoft.com/en-us/library/6ztex2dc.aspx) bạn đã đọc: Bạn phải chỉ định BindingFlags.Instance ** hoặc ** BindingFlags.Static để nhận được trả lại . Vì vậy, có thể bạn không thể liệt kê dụ ** và ** tĩnh cùng một lúc ... ?? – tschmit007
@ tschmit007: Điều đó có liên quan gì đến câu hỏi này? –