لماذا يتم إخفاء DispatcherObject.CheckAccess() و VerifyAccess() من Intellisense؟

StackOverflow https://stackoverflow.com/questions/17500

  •  09-06-2019
  •  | 
  •  

سؤال

ال System.Windows.Threading.DispatcherObject فئة (التي DependencyObject يعتمد على) يحتوي على وظيفة مفيدة تسمى CheckAccess(), ، الذي يحدد ما إذا كان الكود يعمل على مؤشر ترابط واجهة المستخدم أم لا.

عندما أردت استخدامه بالأمس، شعرت بالحيرة عندما اكتشفت أن Intellisense لم يُظهر الوظيفة (ولا VerifyAccess(), ، والذي يطرح استثناءً عندما لا يكون موجودًا في مؤشر ترابط واجهة المستخدم)، على الرغم من أن مكتبة MSDN تدرجه.قررت التحقيق في الفصل باستخدام العاكس.يبدو أن الوظيفة المعنية لها EditorBrowsable(EditorBrowsableState.Never) صفة ملحقة به.ال Dispatcher الطبقة التي يستخدمها DispatcherObject, ، له نفس السمة المرفقة به 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();

    // ...
}

لا أعتقد أن تطبيق تلك السمة عشوائي (أو مزحة)، لذا سؤالي هو:لماذا هو هناك؟هل يجب ألا يتم استدعاء هذه الأساليب مباشرة؟ثم لماذا ليسوا كذلك protected (أو internal, ، مثل بعض الطرق الأكثر فائدة في WPF)؟

هل كانت مفيدة؟

المحلول

موظف في مايكروسوفت ذكرت مؤخرا يُستخدم CheckAccess فقط في "السيناريوهات المتقدمة"، لذلك قاموا بإخفائه عن Intellisense.

"لقد تم دائمًا وضع علامة على CheckAccess و VerifyAccess على أنهما غير مرئيين ، وربما لم يكن Intellisense يحترمها.يمكنك استخدام العاكس للتأكيد.الفكرة هنا هي أن CheckAccess و VerifyAccess هما سيناريوهات التقدم ، والتي لا يحتاجها المطورون العاديون.

ومع ذلك ، أعتقد أن editorbrowsablestate.advanced كان من الممكن أن يكون مستوى أكثر ملاءمة. "

هناك حالة Microsoft Connect لهذا العيب. التصويت لذلك إذا كان من المهم بالنسبة لك.

نصائح أخرى

لم أتمكن من العثور على أي وثائق تنص على أنه لا ينبغي عليك استخدام هذه الأساليب مباشرة، لكنني لم أبحث طويلاً.

يمكنك أيضًا الرجوع إلى EditorVisibleAttribute، وهو غير موجود.وفقا للعاكس هو EditorBrowsableAttribute.

تفكيك العاكس:

[EditorBrowsable(EditorBrowsableState.Never)]
public bool CheckAccess()
{
//CODE
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top