הכרנו בעבר (טיפים מספר 26-34) מחלקות ומתודות גנריות.
ראינו ששימוש בטיפוס עם פרמטר גנרי, יוצר מחלקה בזמן ריצה לכל פרמטר גנרי.
מה שלא כל כך מובן מאליו הוא היכולת הבאה:
נניח שיש לנו מחלקה גנרית סטטית:
|
|
מה תחזיר השורה הבאה?
|
|
התנאי יחזיר שקר. הסיבה היא שעבור כל T נוצרת מחלקה (סטטית) אחרת בזמן ריצה ולכן יש לה Member משלה.
נוכל לנצל את היכולת הזו לכל מיני דברים יפים:
למשל, נוכל לכתוב מחלקה כזו:
|
|
מחלקה זו מאפשרת לנו להגדיר מערך יחיד ולמחזר אותו, למשל:
|
|
דוגמה נוספת היא Factory סטטי – נניח שאנחנו רוצים לכתוב איזשהו Factory לאובייקטים.
ראינו מספר דרכים לעשות זאת, ביניהם טיפים מספר 50, 139, 170.
נוכל לנצל שיטה זו כדי ליצור Factory פר טיפוס שמזכיר את טיפ מספר 50:
|
|
ונוכל להשתמש בו כך:
|
|
זה מאוד מזכיר את טיפ מספר 50, אבל יש הבדל קטן. שם אנחנו שומרים את הDelegateים (הBuilderים) בDictionary ולכן בכל גישה אליו מתבצע חיפוש.
כאן אנחנו מנצלים את זה שהמחלקה סטטית פר טיפוס גנרי, ולכן אנחנו רק שומרים את הDelegate. זה אמור להיות יותר יעיל (כי אין חיפוש).
שימו לב שהFactory הזה ממפה טיפוס לDelegate אחד, בניגוד לFactoryים שראינו בעבר שממפים מחרוזות לDelegateים מתאימים. (כמובן, אפשר לטפל בזה עם לא הרבה עבודה)
הטריק הזה שימושי עבור חישובים שהם כבדים, אבל הם סטטיים פר טיפוס. למשל, התעסקות בReflection – נניח ואנחנו רוצים למצוא את כל הטיפוסים שמממשים ממשק מסוים או את כל המתודות שיש מעליהן Attribute מסוג מסוים. חישובים כאלה יכולים להתבצע פעם אחת (בעליית האפליקציה, או בפעם הראשונה שהחישוב מתבצע), ובד"כ אין טעם שיתבצעו יותר מפעם אחת.
המשך ערב סטטי גנרי טוב