ראינו איך אפשר להריץ מתודות על פי הMethodInfo שלהן.
מה אם המתודה שלנו גנרית?
למשל:
|
|
(ראו גם טיפים 26-27)
נוכל לנסות לעשות משהו כזה, כמו שעשינו עד עכשיו:
|
|
אלא שנקבל Exception כזה:
InvalidOperationException: Late bound operations cannot be performed on types or methods for which ContainsGenericParameters is true.
הסיבה היא די ברורה – המתודה לא יודעת מהו הפרמטר הגנרי שאנחנו רוצים לשלוח לפונקציה. כדי לפתור זאת, נוכל להשתמש במתודה דומה למתודה MakeGenericType (טיפ מספר 140). שמה הוא MakeGenericMethod. למתודה זו אנחנו מעבירים את הפרמטרים הגנריים שאנחנו מעוניינים לשלוח לפונקציה, והיא מחזירה לנו MethodInfo המתאר את הפונקציה עם הפרמטר הגנרי המוזרק:
|
|
הדבר מאוד חזק, מאחר והוא מאפשר לנו לקרוא לפונקציות גנריות עם טיפוסים שאנחנו מכירים רק בזמן ריצה.
המשך יום גנרי משתקף לטובה