250. Implementing a fluent syntax - part 3

בהמשך לפעמים הקודמות, נניח שהגדרנו Fluent Syntax חביב ויצרנו Extension Method מתאים לאובייקט שלנו כדי שהמשתמשים שלנו יוכלו להשתמש בו.

למרבה הצער, למשתמשים עדיין מופיעות כל מיני פונקציות לא קשורות שנובעות מהמחלקה Object:

1
2
3
4
Type GetType();
int GetHashCode();
string ToString();
bool Equals(object other);

כמובן, איננו יכולים למנוע מהמשתמש לקרוא לפונקציות אלה, אך אנחנו יכולים לגרום להן לא להופיע בIntellisense: 😃

ניצור ממשק

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[EditorBrowsable(EditorBrowsableState.Never)]
public interface IFluentSyntax
{
[EditorBrowsable(EditorBrowsableState.Never)]
Type GetType();
[EditorBrowsable(EditorBrowsableState.Never)]
int GetHashCode();
[EditorBrowsable(EditorBrowsableState.Never)]
string ToString();
[EditorBrowsable(EditorBrowsableState.Never)]
bool Equals(object other);
}

הAttribute ששמו EditorBrowsable מציין האם מתודה או Property יוצגו בEditor.

כעת אם נירש מהממשק הזה:

1
2
3
4
public interface ITableDefinitionSyntax : IFluentSyntax
{
// ...
}

לא יוצגו המתודות האלה יותר בIntellisense.


הפאץ’ הזה לקוח מתוך Ninject. הוא מיוחס לDaniel Cazzulino.


סייגים: (כדי שלא תגידו שהטיפ היומי הוליך אתכם שולל)

בתוך הSolution של הפרויקט עצמו דווקא כן נראה את המתודות האלה,

אבל אם נוסיף Reference לפרויקט שלנו מפרויקט אחר, לא נראה אותן.

בנוסף, אם מותקן לכם ReSharper, הוא כן יציג לכם את המתודות האלה 😃

סוף שבוע צף טוב!

שתף