Dlaczego DispatcherObject.CheckAccess () i VerifyAccess () są ukryte przed Intellisense?
TheSystem.Windows.Threading.DispatcherObject
klasa (któraDependencyObject
jest oparty na) zawiera użyteczną funkcję, zwanąCheckAccess()
, który określa, czy kod działa w wątku interfejsu użytkownika.
Kiedy chciałem go wczoraj użyć, zdziwiło mnie, że Intellisense nie wyświetla tej funkcji (aniVerifyAccess()
, który zgłasza wyjątek, gdy nie znajduje się w wątku interfejsu użytkownika), mimo że biblioteka MSDN wyświetla go. Postanowiłem zbadać klasę za pomocą reflektora. Wydaje się, że dana funkcja maEditorBrowsable(EditorBrowsableState.Never)
atrybut dołączony do niego. TheDispatcher
klasa, z której korzystaDispatcherObject
, ma przypisany ten sam atrybutCheckAccess()
iVerifyAccess()
:
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();
// ...
}
Nie wierzę, że zastosowanie tego atrybutu jest losowe (lub żart), więc moje pytanie brzmi: dlaczego tam jest? Czy te metody nie powinny być wywoływane bezpośrednio? Więc dlaczego nieprotected
(lubinternal
, jak niektóre z najbardziej przydatnych metod w WPF)?