2008-08-20 22 views
20

Lớp System.Windows.Threading.DispatcherObject (trong đó DependencyObject được dựa trên) chứa hàm hữu ích, được gọi là CheckAccess(), xác định xem mã có đang chạy trên chuỗi giao diện người dùng hay không.Tại sao DispatcherObject.CheckAccess() và VerifyAccess() bị ẩn khỏi Intellisense?

Khi tôi muốn sử dụng nó ngày hôm qua, tôi đã bối rối khi phát hiện ra rằng Intellisense không hiển thị chức năng (cũng không phải VerifyAccess(), mà ném ngoại lệ khi không ở trên chuỗi giao diện người dùng), mặc dù thư viện MSDN liệt kê nó. Tôi quyết định điều tra lớp bằng cách sử dụng Reflector. Dường như chức năng được đề cập có thuộc tính EditorBrowsable(EditorBrowsableState.Never) gắn liền với nó. Lớp Dispatcher, được sử dụng bởi DispatcherObject, có thuộc tính giống nhau gắn liền với CheckAccess()VerifyAccess():

public abstract class DispatcherObject 
{ 
    // ... 

    [EditorBrowsable(EditorBrowsableState.Never)] 
    public bool CheckAccess(); 
    [EditorBrowsable(EditorBrowsableState.Never)] 
    public void VerifyAccess(); 

    // ... 

    [EditorBrowsable(EditorBrowsableState.Advanced)] 
    public Dispatcher Dispatcher { get; } 
} 


public sealed class Dispatcher 
{ 
    // ... 

    [EditorBrowsable(EditorBrowsableState.Never)] 
    public bool CheckAccess(); 
    [EditorBrowsable(EditorBrowsableState.Never)] 
    public void VerifyAccess(); 

    // ... 
} 

Tôi không tin rằng việc áp dụng thuộc tính đó là ngẫu nhiên (hoặc một trò đùa), vì vậy câu hỏi của tôi là : tại sao nó lại ở đó? Những phương pháp đó có nên được gọi trực tiếp không? Vậy tại sao họ không phải là protected (hoặc internal, giống như một số phương pháp hữu ích nhất trong WPF)?

Trả lời

8

Một nhân viên Microsoft recently stated CheckAccess chỉ được sử dụng cho "kịch bản tiên tiến", vì vậy họ đã giấu nó từ Intellisense.

"CheckAccess và VerifyAccess đã luôn được đánh dấu là không nhìn thấy được, có lẽ IntelliSense đã không tôn trọng nó. Bạn có thể sử dụng Reflector để xác nhận. Ý tưởng ở đây là CheckAccess và VerifyAccess là tiến bộ kịch bản , mà các nhà phát triển bình thường không cần.

Tuy nhiên, tôi nghĩ rằng EditorBrowsableState.Advanced sẽ là cấp độ phù hợp hơn. "

Có trường hợp Microsoft Connect cho thiếu sót này. Vote for it nếu điều đó quan trọng đối với bạn.

+0

Trang Kết nối Microsoft được liệt kê ở trên không còn khả dụng nữa. Đây là một báo cáo mới, trong trường hợp bất kỳ ai muốn tiếp tục hành lang để thay đổi điều này: https://connect.microsoft.com/VisualStudio/feedback/details/3133453 –

0

Tôi không thể tìm thấy bất kỳ tài liệu nào nói rằng bạn không nên sử dụng các phương pháp đó trực tiếp, nhưng tôi đã không nhìn rất dài.

Bạn cũng tham khảo EditorVisibleAttribute, vốn không tồn tại. Theo Reflector, nó là EditorBrowsableAttribute.

Reflector tháo:

[EditorBrowsable(EditorBrowsableState.Never)] 
public bool CheckAccess() 
{ 
//CODE 
} 
Các vấn đề liên quan