159. GetGetMethod/GetSetMethod Methods

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

הכרנו קצת את PropertyInfo וראינו איך לעשות איתו דברים דומים לדברים שעשינו עם MethodInfo.

כידוע, Property הוא בסה”כ Syntactic Sugar למתודה שמחזירה ערך ולא מקבלת פרמטרים (מתודת Get) ומתודה שמקבלת ערך ולא מחזירה ערך (מתודת Set)

למשל, הProperty הזה

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Person
{
private int m_Age;
public int Age
{
get
{
return m_Age;
}
set
{
m_Age = value;
}
}
}

מתקמפל מאחורי הקלעים למשהו כזה:

1
2
3
4
5
6
7
8
9
public void set_Age(int value)
{
m_Age = value;
}
public int get_Age()
{
return m_Age;
}

ייתכן ונרצה להשתמש בMethodInfo של המתודות האלה, למשל אם כתבנו פונקציה שיודעת לטפל בMethodInfo ייתכן ונרצה לשלוח אליה את הGetter/Setter של הProperty. במקרה כזה יחסך לנו שכפול קוד, במקום שנצטרך לכתוב מתודה נוספת שמשתמשת בGetValue במקום בInvoke שלMethodInfo.

כדי לעשות זאת, מסתבר שיש מתודות בשם GetGetMethod וGetSetMethod המאפשרות לנו להשיג את המתודות הנ"ל:

1
2
3
4
5
6
7
8
9
10
11
12
PropertyInfo ageInfo =
typeof (Person).GetProperty("Age");
MethodInfo getAge =
ageInfo.GetGetMethod();
Console.WriteLine(getAge.Name); // get_Age
MethodInfo setAge =
ageInfo.GetSetMethod();
Console.WriteLine(setAge.Name); // set_Age

לזכור ולא לשכוח

שתף