אחת ההמצאות היפות בC# היא הdelegateים.
מדובר במצביע לפונקציה, כלומר טיפוס שמאפשר להכניס פונקציה למשתנה.
אחד הדברים המגניבים שאפשר לעשות עם delegateים הוא ליצור פונקציות שמקבלות delegate ומשתמשות בו.
למשל, אנחנו יכולים לכתוב delegate כזה
|
|
זהו delegate שמקבל באופן איבר מטיפוס T ובודק אם חל עליו תנאי.
כעת נוכל לכתוב פונקציה כזאת:
|
|
זו פונקציה שמקבלת אוסף של איברים ופרדיקט, ומוצאת את האיבר הראשון באוסף שחל עליו התנאי.
נוכל לקרוא לה לדוגמה כך:
ניצור פונקציה עם חתימה של הפרדיקט
|
|
ניצור אוסף:
|
|
ונקרא לה:
|
|
יפה, לא?
מה הבעיה?
הבעיה היא שכעת בשביל כל קריאה לפונקציה, נצטרך לכתוב פונקציה טיפשית כזאת (לפעמים לאו דווקא טיפשית, וכדאי לכתוב פונקציה כזאת אם היא מורכבת ובעלת לוגיקה מסובכת)
אז בC# 2.0 באו והחליטו שיאפשרו לנו לעשות משהו כזה בלי לכתוב פונקציה:
לזה קוראים Anonymous delegates.
נוכל לבצע בדיוק מה שעשינו קודם, רק כך:
|
|
למי שמעדיף, אפשר גם להכניס למשתנה קודם:
|
|
יתרונות:
- חסכנו הרבה מתודות קטנות ומיותרות
- זה כלי מאוד חזק, ואנחנו נראה את זה בהמשך
חסרונות:
- זה לא הכי קריא בעולם
- ברגע שכתבנו דבר כזה במתודה, לא נוכל לשנות את המתודה שכתבנו את זה בה בזמן דיבוג (Edit and continue)
שבוע אנונימי טוב