377. OptionalAttribute DefaultParameterValueAttribute

מסתבר שקיימת עוד דרך בFramework להגדיר על פרמטרים ערכים דיפולטיים. הדרך היא באמצעות Attributeים על פרמטרים (ראו גם טיפ מספר 246):

1
2
3
4
public static int MyMethod(int number, [Optional][DefaultParameterValue("Berry Sakaroff")]string name)
{
//
}

אם נגדיר פונקציה כך, הקומפיילר לא יזהה אותה כפונקציה עם פרמטרים דיפולטיים ולא נוכל להשמיט את הפרמטרים הדיפולטיים בקריאה אליה.

אז מה זה עושה בכלל? אם נריץ את הפונקציה בReflection (כמו בטיפ הקודם) עם Missing.Value, נקבל את הערך הדיפולטי בפרמטרים שלא ציינו.

הFeature הזה הוא Cross-Language (הוא מתאים לכל השפות שכתובות מעל הFramework) וכנראה לא יותר מדי שימושי מאחר ובC# 4.0 יש כבר דרך טובה יותר להגדיר ערכים דיפולטיים, אבל נחמד להכיר שיש דבר כזה.

דרך אגב, אם נסתכל בReflection על מתודה שקימפלנו בC# 4.0 עם פרמטרים דיפולטיים, נראה שיש מעל הפרמטרים הדיפולטיים את הAttribute ששמו Optional, אבל אין את DefaultParameterValue. מעניין העניין.

סופ"ש דיפולטי אחר וטוב.

שתף