160. IsSpecialName

בהמשך לטיפ של אתמול,

כפי שציינתי, Property מתקמפל מאחורי הקלעים למתודה עבור כל Accessor. (כלומר מתודה לGetter ומתודה לSetter)

גם Eventים וIndexerים מתקמפלים למשהו כזה מאחורי הקלעים. איפה הבעיה? נחזור לטיפ 147, שם ראינו שאנחנו יכולים לקבל את כל המתודות הPublicיות של טיפוס.

אם נריץ אותו על הטיפוס הבא

1
2
3
4
5
6
7
8
9
10
11
public class Person
{
public int Age { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public void Talk()
{
Console.WriteLine("Hello");
}
}

נקבל את הפלט המפתיע הבא:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
IEnumerable<MethodInfo> publicMethods =
typeof (Person).GetMethods();
foreach (MethodInfo methodInfo in publicMethods)
{
Console.WriteLine(methodInfo);
}
// Int32 get_Age()
// Void set_Age(Int32)
// System.String get_FirstName()
// Void set_FirstName(System.String)
// System.String get_LastName()
// Void set_LastName(System.String)
// Void Talk()
// System.String ToString()
// Boolean Equals(System.Object)
// Int32 GetHashCode()
// System.Type GetType()

בואו ננתח מה מפתיע כאן: נתחיל מהסוף – 4 המתודות האחרונות הן פשוט מתודות publicיות שקיבלנו מירושה מobject. המתודה החמישית מהסוף היא המתודה שמופיעה במחלקה שלנו. שאר מהמתודות הן המתודות שדיברנו עליהן אתמול שהProperties שלנו מתקמפלים אליהם.

אלא, שמבחינתנו לפעמים נרצה להבדיל בין איך נראה הקוד ואיך הוא מיוצג מאחורי הקלעים. כלומר, נרצה להתעלם לפעמים מהמתודות שProperty מתקמפל אליהן ולהתייחס רק למתודות שתוכנתו כמתודות.

למרבה המזל, נוכל לעשות זאת באמצעות הProperty של MethodInfo ששמו IsSpecialName. Property זה מציין לנו האם למתודה שם מיוחד, כלומר שם שנוצר כתוצאה מקימפול "קוד מטיפוס אחר" (כמו שהוסבר בהתחלה, Properties, Events וכו’)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
IEnumerable<MethodInfo> publicMethods =
typeof (Person).GetMethods();
foreach (MethodInfo methodInfo in publicMethods)
{
if (!methodInfo.IsSpecialName)
{
Console.WriteLine(methodInfo);
}
}
// Void Talk()
// System.String ToString()
// Boolean Equals(System.Object)
// Int32 GetHashCode()
// System.Type GetType()

כך נמענו מהפונקציות של הProperties שלא כל כך רצינו.

שיהיה המשך יום מיוחד

שתף